У меня есть несколько пользовательских директив, которые используют jQuery для анимационных эффектов (angular встроенный ngShow/ngHide и т.д. функциональны, но не очень). Я думаю, что я помню, как читал в документации где-то, что angular имеет свой собственный DOM-селектор (что-то вроде angular.export()
или angular.select()
), которое я должен использовать вместо $(SELECTOR)
; однако я не могу найти его сейчас.
Я делаю что-то вроде этого:
//view
<div scroll-to="element"> //`element` is set via ng-click
…
</div>
//directive
link: function(scope, elm, attrs)
{
scope.$watch(attrs.scrollTo, function scrollToAction(newValue,oldValue)
{
if ( newValue !== oldValue )
{
elm.animate({
scrollTop:
$('#'+newValue).offset().top //replace jquery selector with angular's
- elm.offset().top
+ elm.scrollTop()
});
}
});
}
Я не манипулирую $('#'+newValue)
, просто получая информацию об этом, поэтому я не думаю, что совершу преступление против Angular.