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

Ind*_*cks 6 angularjs angularjs-scope angularjs-ng-init angular-ngmodel

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
  })
});
Run Code Online (Sandbox Code Playgroud)

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}}
Run Code Online (Sandbox Code Playgroud)

这是plnkr

  1. ng-init是否关注像ng-model这样的实例化属性的变化?
  2. 如何查看ng-init实例化的属性中的更改?
  3. 上面的$ watch功能有什么问题?

PSL*_*PSL 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}}
Run Code Online (Sandbox Code Playgroud)

plnkr