4

我想要一个可以像这样使用的属性指令:

<div my-dir="{items:m.items, type:'0'}"></div>

在我的指令中,我可以把它变成一个像这样的对象:

function (scope, element, attributes, modelController)
{
   var ops = $.extend({}, scope.$eval(attributes.myDir));
}

现在说 m.items 是一个数组。在某个地方,ajax 调用将数组替换为一个新数组。我想关注这个。

如何查看m.items或为属性中的 items 属性输入的任何内容?watch 表达式应该是什么?

4

2 回答 2

6

您应该能够使用 scope.$watch 来观察属性。当任何值发生变化时,Angular 将调用整个对象的回调。

function(scope, elem, attrs) {
  scope.$watch(attrs.myDir, function(val) {
    // Do something with the new value, val.
  }, true);
}

http://plnkr.co/edit/JBGqW8uFzh1eJ1Ppq3fT

每当模型更改(通过在输入中键入内容)时,指令都会更新 $watch 中的元素 html。

编辑了我的答案:您希望包含 true 作为比较对象值的最后一个参数,而不是引用。否则,您将运行摘要 10 次以上并获得异常。

于 2013-10-07T00:52:51.823 回答
1
scope.$watchCollection (watchExpression, listener)

参考:https ://docs.angularjs.org/guide/scope

于 2016-04-21T00:41:39.393 回答