-2

我有一个复选框组,我想获取所有选中的项目。我正在尝试将一个数组传递给一个函数,以便我可以获取所有已检查的项目,但它不起作用。

checkedCategory: Array<number>;


contains(checkedArr: Array<number>, id: number): boolean {
  if (checkedArr instanceof Array) {
    return checkedArr.indexOf(id) > -1;
  } else if (!!checkedArr) {
    return checkedArr === id;
  }
  return false;
}

private add(checkedArr: Array<number>, id: number) {
  if (!this.contains(checkedArr, id)) {
    console.log('add: ' + checkedArr);
    if (checkedArr instanceof Array) {
      checkedArr.push(id);
    } else {
      checkedArr = [id];
    }
  }
}

private remove(checkedArr: Array<number>, id: number) {
  const index = checkedArr.indexOf(id);
  if (!checkedArr || index < 0) {
    return;
  }
  checkedArr.splice(index, 1);
}

toggleCategory(id: number) {
  if (this.contains(this.checkedCategory, id)) {
    this.remove(this.checkedCategory, id);
  } else {
    this.add(this.checkedCategory, id);
  }
}

我的复选框中有一个(单击)事件,它将调用 togglecategory

(click)="toggleCategory(category.id)"

然后,当我尝试 console.log 'checkedCategory' 时,它是未定义的。

我有 3 个复选框组,我想重用“包含/添加/删除”功能,这就是我想传递一个数组的原因。

谢谢

4

1 回答 1

1

当您调用toggleCategory(20)查看会发生什么时,在您的情况下,您将看到您的函数将打印add: undefined。所以你必须调试的第一件事是你的 add 函数。我认为问题在于您的数组未定义。尝试像这样初始化你的空数组let checkedCategory: Array<number> = Array(); 但是无论哪种方式,你都需要调试你的 add 函数。祝你好运 :)

如果您对为什么这是解决方案有任何疑问,请告诉我,如果您有兴趣,我不介意从理论方面分享为什么会发生这种情况。

于 2019-07-29T01:13:34.437 回答