(angularjs 1.3.9)在向ng-repeat添加新项目时未被非法访问

时间:2015-05-29 00:33:09

标签: javascript angularjs angularjs-ng-repeat

我尝试从控制器向其中添加新项目时,有一个不同步的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由于某种原因不喜欢重复。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

因此,在检查了Shehryar Abbasi的答案之后,ng-repeat正按价值跟踪列表中的项目。告诉它按$ index跟踪:

ng-repeat="item in items track by $index"

我现在能够在没有访问错误的情况下将重复数据插入到循环中。