アニメーション効果に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に対する犯罪を犯しているとは思わない。
"jqLite"( angular.element ページで定義)は、children()
、parent()
、contents()
、find()
、next()
(ただし、previous()
は除く)。セレクタのようなメソッドはありません。
JavaScriptの querySelector を試してください。
Angularのすべての要素参照は常にラップ withjQueryまたはjqLite(ディレクティブのコンパイル/リンク関数の要素引数など)。生のDOM参照ではありません。
詳細:jQuerybefore your Angular reference、angular.element()
関数はjQueryのエイリアスになります(それ以外はjqLite
です。MarkRajcokの答えを参照してください)。
angular.element()
を呼び出す行にブレークポイントを置くことにより、jQueryまたはjqLiteを取得している場合は、開発ツールデバッガーでチェックインできます。ホバリングすると、関連するライブラリのプロンプトが表示されます。下のスクリーンショットを参照してください(私の場合、jQueryを取得します)。
タグ名による検索の場合は、代わりに
angular.element(document).find(...)
または$document.find()
を試してください
言い換えると、angular.element()
を呼び出すときにjQueryを取得した場合、angular.element('#foo > bar')
のようなものは、それがあなたが考えているものであれば機能します。
JQueryを使用せずにこのセレクター機能を取得する方法を知りたい場合は、 Sizzlejs を使用できます。 SizzleはjQueryが内部で使用するセレクターライブラリです 。