2013-12-10 14 views
6

ディレクティブ内で監視したいオブジェクトがあります。
ディレクティブには独立スコープがあり、オブジェクトは親コントローラから取得します。親コントローラから隔離スコープの子ディレクティブへのオブジェクトの受け渡し

DOM:
<div hello-directive obj-to-track="{{myObj}}"></div>

指令JS:

scope:{ 
    objToTrack:'@' 
}, 
link:function(scope,element,attrs){ 
    scope.$watch(function(newValue){ 
     //Inside here, newValue is a JSON string 
     //So is scope.objToTrack 
    }); 
} 

JSON.parse()
感謝以外に、親コントローラから実際のオブジェクトを取得するにはとにかくがあります。

+1

:として

scope.$watch("objToTrack", function(newval, oldval) { ... }); 

はそれを使用してください。 JSONはデータ配信文字列形式です。あなたのアプリの中では、配信されたデータから得られたオブジェクトと配列を扱っています – charlietfl

+0

なぜ私は混乱していると思いますか。 – Francisc

+0

ok ...コメントの説明 'ここでは、newValueはJSON文字列'です。それはあまり意味がありません – charlietfl

答えて

8

だけ結合"="を使用します。

scope:{ 
    objToTrack: "=" 
} 

いつものようにそれを見る:あなたがオブジェクトとJSONの間で混乱してきているように思わ

<div hello-directive obj-to-track="myObj"></div> 
+3

私は知っていますが、それは双方向バインディングを可能にします。これは巨大な問題ではありませんが、可能であれば、このディレクティブに書き込むことはできません。それが不可能ならば、それはしなければならないでしょう。 – Francisc

+0

'myObj'が"プリミティブ "値でない限り、書き込みを禁止することはできません。つまり、myObjへの参照のコピーを渡しても、その指示はまだmyObjの実際のメンバーにアクセスできます。場合によっては ''& ''バインディングと組み合わせて、オブジェクトを '' .copy() ''してからディレクティブに渡すこともできますが、おそらくもっと面倒です。 –

+0

OK、ありがとう。私はただ私の指示にそれを変更しないように頼んでいます。 :) – Francisc

関連する問題