2015-02-11 66 views
5

我正在使用batarang来确定某些性能问题的来源。其中一个更大的罪魁祸首是我自己的代码,但是这个parentValueWatch事件现在已经成为图表的顶端,我不知道它在哪里或触发它。我的大脑在谷歌地图上被谷歌搜索...有人知道吗?AngularJS中的parentValueWatch是什么?

(AngularJS v1.2.24)

enter image description here

+0

这是一个函数,用于监视父范围的变化与使用'scope:{param:“=”}''的指令的隔离范围。这是[源代码](https://github.com/angular/angular.js/blob/v1.2.24/src/ng/compile.js#L1487)。确保您的绑定值不绑定到长时间运行的函数 – 2015-02-11 21:08:42

回答

5

ParentValueWatch是当它的父范围指令检查,看看是否有值发生了变化,因此,需要将自身改变。

考虑简单的指令,

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

现在,让我们在父范围说,foo是一个对象。

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

每个$digest循环,孩子$范围将需要检查父范围的foo价值和它的各个属性。

如果foo是一个非常大且深度嵌套的对象,这将需要很长时间,因此它需要这么长时间。

的HTML里面看,这可能是这样的:

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

一个快速解决有关此是“冻干”使用NG-初始化值。

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

现在绑定到新对象的值。你失去了简单的约束,但获得了性能。

它总是一个折衷。

相关问题