AngularJS $在初始化后监视值的变化

时间:2014-02-03 14:29:12

标签: javascript angularjs angularjs-directive

我遇到这种情况,我需要在模型更改时捕获事件,但是我的指令中的初始化会过早地触发事件。

Plunker:http://plnkr.co/edit/2T0Rq6yOXHWxQAOv8RpX?p=preview

我怎样才能克服这一点?设置一些标志,但是如何/在哪里?其他方法?

谢谢!

更新

我在指令中添加了value属性,这样您就可以更好地理解初始化的含义。

Plunker:http://plnkr.co/edit/a5fzJi7VzAytj3Urj06L?p=preview

3 个答案:

答案 0 :(得分:3)

我终于解决了!

Plunker:http://plnkr.co/edit/a5fzJi7VzAytj3Urj06L?p=preview

Angular中的form指令有一个名为$dirty的属性。它以false开头,当您更改输入的值时,ngModel指令使表单“脏”。首先,我尝试在我的指令中使用ngModel,但我最终要求直接使用form

PS。这仅在第一次更改时触发,但这正是我所需要的。

答案 1 :(得分:1)

您将data定义为

$scope.data = { x: 51 }

稍后在解析Angular时会检测到还有两个属性:yz并且它们未定义。在指令中,在这种情况下将它们设置为0。所以你的数据对象变成了

{ x: 51, y: 0, z: 0 }

显然$scope.data已发生变化,观察者应该开火。这就是它发生的原因。

要解决此问题,您只需使用初始datay值定义z

$scope.data = { x: 51, y: 0, z: 0 };

演示:http://plnkr.co/edit/RfztKvrxhzPYMoSss7Fm?p=preview

答案 2 :(得分:0)

您可以检查对象上是否存在属性。 demo

 if ((newValue !== oldValue) && oldValue.x) {

或者更精确demo

if ((newValue !== oldValue) && (typeof oldValue.x !== 'undefined')) {