我尝试从控制器向其中添加新项目时,有一个不同步的ng-repeat并返回“未被捕获的非法访问”。
我用来填充ng-repeat的控制器范围数组得到了更新,但在此过程中会丢失一些东西。
我的HTML:
<div ng-repeat="item in items" class="list-item"
ng-include="'queue/' + item.type.parent + '.html'"></div>
我的控制器功能将新数据推送到它:
public addNotification(type: string): void {
switch(type) {
case "itemOne":
this.scope.items.unshift(this.service.scope.itemOne);
break;
case "itemTwo":
this.scope.items.unshift(this.service.scope.itemTwo);
break;
case "itemThree":
this.scope.items.unshift(this.service.scope.itemThree);
break;
case "itemFour":
this.scope.items.unshift(this.service.scope.itemFour);
break;
}
// remove item from array after hiding
this.timeout((): void => {
// these properties return illegal access
this.scope.items[0].expand = true;
this.scope.items[0].visible = true;
}, 250);
}
我的服务提供数据的对象:
this.scope.itemOne = {
type: {
parent: 'itemOne'
},
// a bunch of json data
expand: false,
visible: true,
focus: true
};
控制器从我的服务获取数据正常,控制器items属性具有我期望的填充列表,但ng-repeat再次无法更新。
当我尝试将重复的json数据从服务添加到控制器中时,会出现此问题。控制器得到它并存储它我对this.scope.items的期望,但ng-repeat由于某种原因不喜欢重复。
感谢您的帮助
答案 0 :(得分:0)
因此,在检查了Shehryar Abbasi的答案之后,ng-repeat正按价值跟踪列表中的项目。告诉它按$ index跟踪:
ng-repeat="item in items track by $index"
我现在能够在没有访问错误的情况下将重复数据插入到循环中。