ng-init是否关注像ng-model这样的实例化属性的变化?

时间:2014-08-29 18:20:55

标签: angularjs angularjs-scope angular-ngmodel angularjs-ng-init

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功能有什么问题?

1 个答案:

答案 0 :(得分:8)

  

ng-init是否关注像ng-model这样的实例化属性的更改?

不,只是初始化范围内的属性。我建议不要使用它。标记不适用于变量初始化,您应该尽可能在控制器中执行此操作。

  

如何观察由ng-init实例化的属性的变化?

您可以像观看任何其他财产一样观看,但观看并不意味着手表会被触发。手表仅在摘要周期中触发,仅当角度与特定动作有关时才会调用摘要周期。

  

上面的$ watch功能有什么问题?

prop1上的手表将永远不会被执行(在初始化初始化之后),因为您永远不会更改模型值,因为没有绑定到它的ngModel。并且没有对元素进行角度动作,因此不会发生消化循环。

作为示例,只需在元素上附加一个keyup事件,并将输入值分配给属性myProp,因为您已经注册了keyup处理程序,它将在处理程序运行后触发摘要循环,并且您将看到手表被执行并且绑定得到更新

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

<强> plnkr