7

ng-init は ng-model のようにインスタンス化されたプロパティの変更を監視しますか?

どうやらそうではないので、以下に示すように時計を設定しました。

app.js

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.$watch('myProp1', function(newVal, oldVal){
    $scope.myProp1 = newVal
  })
});

html

<body ng-controller="MainCtrl">
<input ng-init='myProp="my property"'>{{myProp}}</br>
<input ng-init='myProp1="my 1 property"'>{{myProp1}}</br>
<input ng-init='myProp11="my 11 property"' ng-model='myProp11'>{{myProp11}}

plnkrはこちら

  1. ng-init は ng-model のようにインスタンス化されたプロパティの変更を監視しますか?
  2. ng-init によってインスタンス化されたプロパティの変更を監視するにはどうすればよいですか?
  3. 上記の $watch 関数の何が問題になっていますか?
4

1 に答える 1

9

ng-init は ng-model のようにインスタンス化されたプロパティの変更を監視しますか?

いいえ、スコープのプロパティを初期化するだけです。使用しないことをお勧めします。マークアップは変数の初期化用ではありません。できるだけコントローラーで行う必要があります。

ng-init によってインスタンス化されたプロパティの変更を監視するにはどうすればよいですか?

他のプロパティを監視するのと同じように監視できますが、それを監視しても、監視がトリガーされるわけではありません。ウォッチはダイジェスト サイクル中にのみトリガーされ、ダイジェスト サイクルは、angular が特定のアクションと関係がある場合にのみ呼び出されます。

上記の $watch 関数の何が問題になっていますか?

prop1ngModel がバインドされていないため、モデル値を変更することはないため、(ng Init の初期化後)監視が実行されることはありません。また、要素に対して角度のあるアクションは実行されないため、ダイジェスト サイクルは発生しません。

例として、要素に keyup イベントを添付し、入力の値をプロパティに割り当てますmyProp。keyup ハンドラーを登録しているため、ハンドラーが実行された後にダイジェスト サイクルがトリガーされ、ウォッチが実行されてバインドされていることがわかります。更新中

 <input ng-init='myProp="my property"' ng-keyup="test(myProp=$event.target.value)">{{myProp}}

plnkr

于 2014-08-29T19:07:09.220 に答える