问题
我发现 ng-repeat 指令无法跟踪新数组的添加。
在我的示例中,新数组是“选项”。
该指令是使用 ng-dialog(第 3 方库)显示的模板的一部分。
如果我关闭对话框并再次打开它,ng-repeat 将拾取我在关闭它之前所做的更改。
我尝试过 $scope.$apply();但我收到一条警告,表明它已经在运行。
更新++
我最终使用的解决方案是在 ng-init 上添加一个函数来首先检查该数组是否存在,如果不存在则创建它,然后将其分配给新变量。
这是一个更深入的示例,
写这篇 jsFiddle 已经指出问题出在 ng-include/ng-repeat 中 - 没有这个也没关系。
<罢工> http://jsfiddle.net/20mobk2h/56/ 罢工>
http://jsfiddle.net/20mobk2h/61/
ng-repeat 在一个名为 options 的数组上循环,该数组可能存在也可能不存在。
<div ng-init="options = element.options">
<div ng-repeat="option in options" ng-include="'optionsTree'"></div>
</div>
我添加一个新选项:
$scope.addItem = function(item) {
if(!item.options){
item.options = [];
}
var obj = {
val: 'blah'
};
item.options.push(obj);
}
最佳答案
更改此代码:
<div ng-init="options = item.options">
<div ng-repeat="option in options" ng-include="'nest_options'"></div>
</div>
对此:
<div>
<div ng-repeat="option in item.options" ng-include="'nest_options'"></div>
</div>
这里的问题是,当您将 item.options
分配给新变量 options
时,您会中断对 item
对象的引用,因为对于第一个时间(当 item.options
为 未定义
时)选项为 未定义
,原始值在 Javascript 中按值传递。因此,稍后当您更改 options
属性(通过添加新的数组元素)时,此更改不会反射(reflect)在 options
变量中。
但是当你第二次打开弹出窗口时,item.options
不再是undefined
,它已经是一个对象(数组),所以赋值options = item.options
结果变成普通对象引用,并且对 item.options
的更改反射(reflect)在 item
中。
演示:http://jsfiddle.net/20mobk2h/57/
关于javascript - AngularJS ng-repeat 未检测到使用 ng-include 动态生成的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26233726/