35

アニメーション効果(角度のビルトインngShow/ngHideなどは機能的ですが、きれいではありません)にjQueryを使用するカスタムディレクティブがいくつかあります。私は、$(SELECTOR)の代わりに、角度に独自のDOMセレクタ(angular.export()angular.select()など)があることをドキュメントのどこかで覚えていると思います。しかし、私は今それを見つけることができません。AngularJS DOMセレクタ

私はこのような何かをやっている:

//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.elementページで定義)

答えて

36

"jqLit​​eは" children()parent()contents()find()next()(ただしprevious())のようなDOMのトラバーサルメソッドを提供します。セレクタのような方法はありません。

JavaScriptのquerySelectorを試してみるとよいでしょう。

+0

+1私は、OPが要素を選択できる角度のある方法を見ていると感じる理由を説明するかもしれない追加情報も追加しました。 –

+0

ああ、ありがとうございました。私は角度の前にjqueryを含んでいますので、 'angular.element()'はなお好ましいですか?エイリアスを解決する余分のオーバーヘッドが追加されるようです。 – jacob

+4

@jacob、私は 'angular.element()'を使用して、将来あなたのコードがjQueryを必要としなくなったら、それを更新する必要はないでしょう。 –

38

official AngularJs doc says

として角度のすべての要素の参照は常に(例えばディレクティブのコンパイル/リンク機能で要素の引数として)jQueryのまたはjqLit​​eに包まれています。それらは生のDOM参照ではありません。詳細は

:あなたはあなたの角度を参照する前jQueryのが含まれている場合、angular.element()関数は(それ以外jqLiteだ、マークRajcokの回答を参照してください)jQueryのためのエイリアスになります。


あなたがangular.element()を呼び出す行にブレークポイントを配置することによって、jQueryのかjqLit​​eを取得している場合は、デベロッパーツールデバッガで確認することができます。ホバリングすると関連するライブラリが表示されます。下のスクリーンショットを参照してください(私の場合、jQueryを取得します)。タグ名で検索の場合official AngularJs doc says

として

jQuery for <code>angular.element()</code>


、代わりにangular.element(document).find(...)または$document.find()

言い換えれば試してみてください。angular.element()を呼び出すときにjQueryのを取得する場合、それがyou'rなら何でもangular.element('#foo > bar')のようなものが動作しますeの考え。


あなたはjQueryのセレクタなしでこの機能を取得する方法を迷っている場合は、Sizzlejsを使用することをお勧めします。 Sizzle is the selector library that jQuery uses under the hood

関連する問題