私はAngularJsディレクティブに比較的慣れていないので、スコープがどのように機能するかを理解しようとしています. よくわかると思いますが、次のような問題に遭遇します。私の指示:
<ng-view>
<div my-directive ng-click="foo()" >...</div>
</ng-view>
指令コード:
app.directive('myDirective',function(){
return function(scope,element,attrs){
scope.foo = function(){...}
}
})
要素をクリックすると発火することを期待していfoo()
ましたが、そうではありません。batarangでスコープを確認すると、rootScopeを親としてスコープが存在する(id:#003)ことがわかりますが、要素またはその子をクリックすると、スコープはルート(id:#002)にangular.element($('div[my-directive]')).scope()
なります。バトランの問題ですが、結果は同じでした。
更新:問題の原因を見つけたと思います。実際のアプリでは、ディレクティブを使用する要素がディレクティブ内にあります。ngView
ディレクティブを ngView の外に置くと、リンク関数で定義したプロパティがスコープに表示されるようになりました( rootScope)。非同期ロードが原因だと思いますが、確認する必要があります。このフィッフルでは、静的テンプレートで ngView を使用しましたが、機能しませんでした (機能し、問題を再現できませんでした)。