打字稿:数组未存储对象

时间:2019-10-31 23:08:41

标签: angularjs typescript

我正在尝试通过复选框单击事件将行对象分配给数组。为此,我创建了一个如下所示的全局数组。

SelectedGrid: any[] = [];

在单击时,它似乎进入了数组,但是当我选中第二个复选框时,第一个项目就从数组中丢失了。 我可以知道为什么会这样吗?

以下是我在复选框单击事件中调用的函数。

public clickConditionRow(row, col, rowSelected) {

            if (rowSelected.isChecked) {
                    this.SelectedGrid.push(rowSelected);             


                console.dir(this.SelectedGrid);
                console.log(this.SelectedGrid.length);

            } else {
                console.log("Unselected ");
                var toDel = this.SelectedGrid.indexOf(rowSelected);
                this.SelectedGrid.splice(toDel);
                console.dir(this.SelectedGrid);
            }

            if (!this.rootScope.$$phase) {
                this.rootScope.$apply();
            }

// for print the values
            for (var y = 0; y < this.SelectedGrid.length; y++) {
                console.log("Element " + y + " = " + this.SelectedGrid[y]);
                console.dir(this.SelectedGrid[y]);
            }

        }

1 个答案:

答案 0 :(得分:0)

我无法重现您的错误(也许您是在其他位置覆盖了数组?),但是我看到了2个潜在的问题,并想指出它们:

  1. indexOf与and对象一起使用可能无效,并返回-1(请参见下面的代码)
  2. splice(toDel)应该为splice(toDel, 1),否则它将删除从索引toDel到数组末尾的所有项目。

const a = { id: 1 }
const b = { id: 2 }
const list = [ a, b ]

// This returns 1
console.log(list.indexOf(b))

// This returns -1
console.log(list.indexOf({ id: 2 }))