我花了很多时间来检测这个,我只是想知道是否有人有解释来帮助我理解。反过来,它可能会帮助其他人遇到这个问题......
作为递归指令,当尝试在ng-repeat上使用ng-init时,不会检测到对范围的任何更改。但是,如果在递归调用指令时设置新值,则此方法有效。必须有一些我对ng-init
没有理解的东西,却未能找到任何可以使我理解这个问题的东西。
jsfiddle在这里,只是注释掉指令中的一个部分,看它失败而另一部分完美运行:http://jsfiddle.net/DsvX6/41/
简而言之:
这会失败,虽然会检测到在此范围内添加$ watch,但它不会触发指令刷新它的视图。请注意ng-init
上的ng-repeat
。
'<ul>' +
// does not work
'<li class="tree" ng-repeat="(key, val) in names" ng-init="values=values[key]">' +
'<div>{{key}} <input type="checkbox" ng-checked="values.set"></div>' +
'<tree names="val" values="values"></tree>' +
'</li>' +
'</ul>';
我让这个工作的唯一方法是以下,这里注意传递的递归值不在ng-init中,而是在指令上(名为&#34;
'<ul>' +
// works
'<li class="tree" ng-repeat="(key, val) in names">' +
'<div>{{key}} <input type="checkbox" ng-checked="values[key].set"></div>' +
'<tree names="val" values="values[key]"></tree>' +
'</li>' +
'</ul>';
同样,如果有人能够解释这一点以便更好地理解我,或者其他人遇到这种情况,我们将不胜感激。