AngularJS 中的 parentValueWatch 是什么?

What is parentValueWatch in AngularJS?

我正在使用 batarang 来确定一些性能问题的根源。更大的罪魁祸首之一是我自己的代码,但是这个 parentValueWatch 东西现在位居榜首,我不知道它在哪里或者是什么触发了它。谷歌搜索太多了,我的大脑都在地板上……有人知道吗?

(AngularJS v1.2.24)

ParentValueWatch 是指令检查其父范围以查看是否有任何值已更改,因此需要自行更改。

考虑简单的指令,

{
   restrict:"AE",
   scope:{
      foo:'='
   }
}

现在假设在父作用域中,foo 是一个对象。

$parent.$scope.foo = {
    bar:"zim"
}

每个 $digest 周期,子 $scope 将需要检查父作用域的 foo 值及其每个属性。

如果 foo 是一个非常大且嵌套很深的对象,这将花费很长时间,这就是为什么要花这么长时间。

在 HTML 中,这可能看起来像这样:

<div parent-directive>
<div foo-directive foo=bar></div></div>

一个快速解决此问题的方法是 "freeze-dry" 使用 ng-init 的值。

<div parent-directive>
<div foo-directive ng-init='zug={bar:$parent.foo.bar}' foo=zug></div></div>

现在绑定到新对象的值。您失去了轻松绑定,但获得了性能。

这总是一个权衡。