2016-06-18 15 views
0

を働きません、それはこのような小道具から自分のデータを取得し、変更を支えるために聞く:角度ディレクティブは、私はD3をレンダリングするディレクティブを作成し

<my-directive words="fromControllerData"></my-directive> 

今「fromControllerDataは」親によって変更することができますし、私がしたいです私の指示を書き直してください。

はどのようにして、データの変更に耳を傾けていますか?

は、多くの例を見つけましたが、どれも働いていない...ここ

プロジェクトへのリンクです:あなたは上の指示を見ることhttps://plnkr.co/edit/I6eyFMBrhoDpxfOsulrI?p=preview

app.js // line 48 

私はスコープを試してみました$時計。 。そしてスコープ$ watchCollection ...

説明するためのいくつかのコード:

conroller:

app.controller('AppController', ['$scope', '$rootScope', 'serverData', function($scope, $rootScope, serverData) { 
$scope.data = { 
    words: serverData 
}; 

setTimeout(function() { 
    console.log('changegd'); 
    $scope.data.words = []; 
}, 1000); 

}]); 

一部のディレクティブコード:

app.directive("gravityWordCloud", ['serverData', function(serverData) { 
return { 
    restrict: "EA", 
    scope: { 
     words: "=" 
    }, 
    link: function(scope, element, attrs) { 
     // dontcare stuff 

     //this happens only on first load...... 
     //but never again 
     scope.$watchCollection('words', function() { 
      console.log(scope.words); 

     }); 

    } 
} 
}]) 

答えて

0

使用この:

scope.$watch('scope.words', function() { 
    console.log(scope.words); 
}, true); 

$の時計機能のみ変更されないオブジェクトの参照を比較。最後の「true」パラメータを追加すると、「深い」時計になります。角度のドキュメント(https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope)から関数のシグネチャ:

$watch(watchExpression, listener, [objectEquality]); 

別のアプローチは、言葉を返す関数を作成し、機能を見て次のようになります。

scope.$watch(function() { 
    return someFunctionThatReturnsWords(); 
}, function() { 
    console.log(scope.words); 
}); 

編集:また、あなた代わりに見て言葉 '「scope.words」

私はあなたのPlunkerに次のコードを追加した、とこの作品
+0

すでに試してみました。 –

+0

私はちょうど別のエラーを見ました:あなたはまた、 '単語'の代わりに 'scope.words'を見る必要があります。 – Keugels

+0

でもそれを試しました:/あなたがコード上で動作させることができるかどうか見てください、私は実際には9時間を無駄にしました.... –

0

var getWords = function() { 
    return scope.words; 
} 

scope.$watch(getWords, function() { 
    console.log(scope.words);    
}, true); 
0

まあ、それは最も小さいものが、膨大な時間の無駄誰でもこのエラーを取得している...

私は「言葉」それは「タイムアウト」の上にあるときに、変数も同様に、コントローラのスコープ内で更新されていないに気づいたが、突然何かをクリックしている間に別の方法で手動で変更すると、タイムアウトの変更も表示されます。

ボトムライン: 私はjavascriptを変更するとき:

setTimeout 

角度へ:

$timeout 
突然

すべてがうまく働いた...ので、それはおそらくスコープで何かある

をし、もの...