7

ng-init 是否像 ng-model 那样监视实例化属性的变化?

显然不是,所以我设置了一个手表如下图:

应用程序.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 函数有什么问题?

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

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

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

plnkr

于 2014-08-29T19:07:09.220 回答