ng-repeat上的递归指令和ng-init无法检测范围变化

时间:2014-03-16 17:02:01

标签: angularjs angularjs-directive

我花了很多时间来检测这个,我只是想知道是否有人有解释来帮助我理解。反过来,它可能会帮助其他人遇到这个问题......

作为递归指令,当尝试在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>';

同样,如果有人能够解释这一点以便更好地理解我,或者其他人遇到这种情况,我们将不胜感激。

0 个答案:

没有答案