javascript - 尝试使用复选框取消选择处理从数组中删除项目

标签 javascript arrays angular typescript checkbox

我正在尝试根据 Angular 2 应用程序中是否选中复选框来处理从数组中推送和删除元素。我知道 native HTML 可以处理某种形式的这种逻辑,但我正试图找出确切的目标。这是我的函数的样子:

private onOptionSelected(option)
{
    let optionObj = {
        option: option,
        complex: false
    };

    if (option)
    {
        this.record.requestedOptions.push(optionObj);
    }
    else if (!option)
    {
        this.record.requestedOptions.splice(option);
    }
}

现在,第一部分有效。我可以选中其中一个复选框,该项目将添加到数组并保存在我的后端。

但是,当我取消选中该项目而不是将其从数组中删除时,该操作还会触发将新项目添加到数组中。

那么我该如何处理这里的负面情况——一个项目未被选中,因此应该从数组中删除?我可以定位原生 HTML 属性,例如“checked”或“!checked”或类似的东西吗?

顺便说一下,这是我的 html/view 的样子:

    <div>
       <md-checkbox 
          (change)="onOptionSelected('A')">Option A
       </md-checkbox>

       <md-checkbox
         (change)="onOptionSelected('b')">Option B
       </md-checkbox>

       <md-checkbox
         (change)="onOptionSelected('c')">Option C
       </md-checkbox>
   </div>

最佳答案

您编写代码的方式有几个问题。 - 不发送选项值,而是在范围内传递事件参数。 - splice 的语法不正确 - Check reference

改变

(change)="onOptionSelected('A')">Option A

(change)="onOptionSelected($event)">Option A

JS

private onOptionSelected(e) {
  let optionValue = e.target.innerHTML.split(' ')[1];
  let isChecked = e.target.checked;

  let optionObj = {
    option: optionValue,
    complex: false
  };

  if (isChecked) {
    this.record.requestedOptions.push(optionObj);
  } else {
    // find the element that contains optionValue
    let indexToDelete = undefined;

    this.record.requestedOptions.forEach((obj, currIndex) => {
         if(obj.option === optionValue) {
            indexToDelete = currIndex;
         }
    });

    if(indexToDelete !== undefined) {
       this.record.requestedOptions.splice(indexToDelete, 1);
    }
  }
}

关于javascript - 尝试使用复选框取消选择处理从数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46436976/

相关文章:

javascript - 除了使用自定义 CSS 和 html 之外,还有其他方法可以显示从 API 获取的推文吗?

javascript - 如何停止重复 ifs

javascript - Jasmine .and.throwError() 未被原始代码中的 .catch 捕获

javascript - 无法在 GraphQL 突变中传递数组 - React Native

用于切换类的 Angular ngClass 和单击事件

angular - 在多列中动态显示 Angular 6 Material 单选按钮

javascript - 将 REST API 用于 Discord 机器人

javascript - Angular JS 中的数组

python - 如何切片 2D numpy 数组以获得它的直接邻居?

javascript - Angular 渐进式 Web 应用程序在本地主机上工作但不在 IP 上