3

配列であるモデル値がディレクティブによって更新されたときに追跡する必要がありますが、$watch が失敗しているようです。問題を説明するためにフィドルを作成しました。

http://jsfiddle.net/DsTLN/

モデルが変わったときにアクションを実行できるように、時計をセットアップします。

$scope.$watch('model.title', function(newValue, oldValue) {
  if ($scope.model) {
      console.debug("watchedTitle=" + newValue);
      $scope.watchedTitle = newValue ;            
  }});

モデルの newValue が整数の場合、$watch はデバッグ ログに示されているように一貫して起動します。

watchedTitle=1 
watchedTitle=2 
watchedTitle=3 
watchedTitle=4 
watchedTitle=5 

アレイへの変更を監視するために 2 番目のウォッチをセットアップします。

$scope.$watch('model.titlearray', function(newValue, oldValue) {

newValue が配列の場合、$watch は最初の使用時にのみ起動します。

watchedTitlearray: 1 

その後、私の2番目の時計は発火しません。

私が間違っていることは何か分かりますか?

4

3 に答える 3

6

リスト内の要素の変化を監視するには、 の 3 番目のパラメーターを に設定します$watchtrue

$scope.$watch('model.titlearray', function(newValue, oldValue) {
    // ...
}, true);  
于 2013-09-26T20:38:11.403 に答える
1

sza が言ったように、$watch の 3 番目のパラメーターを true に設定する必要があります。これは、 angular scope docsに記載されているように、参照ではなく2つのオブジェクトの同等性を比較できるようにするためです

$watch(watchExpression, listener, objectEquality)
  • objectEquality (オプション) - ブール値 - オブジェクトを参照ではなく等しいかどうか比較します。

意図したとおりに動作するように jsfiddle を修正しました。リンクは次のとおりです: http://jsfiddle.net/r4zce/

于 2013-09-26T21:28:31.720 に答える