2017-12-30 24 views
0

Plunkerを参照してください。 問題:メインコントローラ内でitem-over指示文を使用すると、OnOverが正常に起動します。これは正常です:Angularjsネストされたディレクティブスコープ

リストビューディレクティブの中に入れても、コントローラのOnOverメソッドがトリガされません。これは動作しません:

<list-view itemssource="main.Data"> 
    <a href="#" item-over="main.OnOver(item)">{{item.Name}}</a> 
</list-view> 

私は間違っていますか?

+0

はそれがPlunker https://plnkr.co/edit/uc8SYR0hfayz4lqnyxlDに私はのItemsSourceバインディング2WAY必要はありません – madhur

+0

を表示しますlistViewディレクティブのLink関数のitemssourceを参照しますか?次に、listViewディレクティブのテンプレート内のitemssourceにどのようにバインドする必要がありますか? – Derick

答えて

1

問題は、listViewディレクティブが独立したスコープを作成しているため、このディレクティブのスコープ内のmainまたはitemにアクセスできないことです。 onOverは親スコープに属しているためアクセスできません

listviewディレクティブでitemSourceの双方向バインディングを特に必要としない場合は、returnステートメントにscope: trueを設定して、親スコープを継承します。

孤立scope-

return { 
    link:function (scope, element, attrs) { 
     scope.itemsSource = attrs.itemsSource 
    } 
} 

を作成せずにATTR値にアクセスするには、あなたの指示で

使用attrのあなたはのItemsSource同じ方法を渡します -

<list-view items-source="main.Data">

今、あなたはあなたのディレクティブの値を持っていますあなたはそれらと遊ぶことができます。

か、親スコープをinhertingしているので、あなたが直接$親を使用して値にアクセスすることができます - あなたのディレクティブの内側:

link: function (scope, element) { 
    scope.itemsSource = scope.$parent.itemsSource 
} 
plunkrいくつかのより多くの問題が発生したチェックでは、あなたのplunkrのこの作業例を確認してください - リストビューディレクティブに真の、どのようにして私: working plunkr

+0

だ...しかし、私はスコープを設定した場合、あなたの命令コード – Derick

+0

隔離された範囲を作成せずに属性を使用する方法を示す回答が更新されました – madhur

+0

ありがとう!できます!受け入れられた – Derick

関連する問題