10

ディレクティブ内でウォッチを機能させる際に問題が発生しています。ここに簡単な例をまとめました。http://plnkr.co/edit/A7zbrsh8gJhdpM30ZH2P

サービスと 2 つのディレクティブがあります。1 つのディレクティブがサービスのプロパティを変更し、別のディレクティブがそのプロパティを監視します。プロパティが変更されたときに時計が起動することを期待していましたが、そうではありません。

サイトでこのような質問をいくつか見ましたが、受け入れられた解決策はここでは機能しませんでした。$broadcast を使用するか、オブザーバーを実装しようと考えましたが、これは機能するはずであり、可能な限り複雑にしたくありません。

4

2 に答える 2

28

Mark Rajcok の答えは不完全です。angular.copy() を使用しても、$watch リスナーは一度だけ呼び出され、二度と呼び出されません。

関数を $watch する必要があります。

$scope.$watch(

  // This is the important part
  function() {
    return demoService.currentObject;
  },

  function(newValue, oldValue) {
    console.log('demoService.currentObject has been changed');
    // Do whatever you want with demoService.currenctObject
  },
  true
);

ここで機能するプランカー: http://plnkr.co/edit/0mav32?p=preview

ブラウザー コンソールを開いて、ディレクティブと demoService2 の両方が demoService.currentObject の変更について通知されていることを確認します。

ところで、この例では angular.copy() は必要ありません。

于 2013-11-08T02:07:37.837 に答える