【问题标题】:Get list of toggled checkboxes : Angular获取切换复选框列表:Angular
【发布时间】:2022-01-01 21:29:41
【问题描述】:

我有几个复选框。其中一些是根据数据库中的数据默认选择的。用户可以取消选中选中的复选框或选中未选中的复选框。有没有办法只获取那些被切换的复选框值的列表(一旦用户最终决定要切换哪些复选框,这个列表可以在单击按钮时生成)?

<ul>
    <li *ngFor="let file of files">
       <input type="checkbox" ng-selected = "file.isPresent"> {{file.type}}
    </li>
</ul>


 <button (click)="getToggledCheckboxValues()"> Get Value </button>

如果文件已经存在,则默认选中复选框。

【问题讨论】:

    标签: html angular typescript checkbox


    【解决方案1】:

    我将根据files 的默认值创建第二个数组

    toggledFiles = Array(this.files.length).fill(false);
    

    然后像这样为每个复选框添加一个更改方法

    <ul>
      <li *ngFor="let file of files; let i = index">
        <input type="checkbox" (change)="onChange($event,i)" [checked]="file.isPresent"> {{file.type}}
      </li>
    </ul>
    

    最后,每次切换相应复选框的值时,只需切换新数组上的布尔值

    onChange(event, index) {
      this.toggledFiles[index] = !this.toggledFiles[index];
    }
    

    Here 是一个向您展示其工作原理的堆栈闪电战。

    在示例中,我直接显示了每个复选框的切换,但您可以将其保留在数组中,并在您单击 getToggledCheckboxValues() 按钮时使用它。


    您发表评论后的第二种方法(Stackblitz 也已编辑)

    创建一个空数组并附加每个新的切换复选框。

    onChange(event, index) {
      const indexFound = this.toggledFiles.indexOf(index);
      if (indexFound != -1) {
        this.toggledFiles.splice(indexFound, 1);
      } else {
        this.toggledFiles.push(index);
      }
    }
    

    如果您想让复选框在切换一次后保持切换状态,即使用户将值重置为已启动的值,只需删除if 条件并始终将索引推送到数组中

    【讨论】:

    • 很棒的方法。但是要找到实际的切换值(无论最终状态是选中还是未选中),每次单击按钮时我都必须比较两个数组(因为在取消选中之前选中的项目时,我也得到了“真”)。在大量数据项的情况下,该解决方案将具有更大的时间复杂度。正确的 ?另外,有没有办法只获取那些被切换的复选框的列表(不经过整个列表)?
    • 最后,即使用户选中了一个未选中的框,然后再次取消选中,您需要切换框数组中的值吗?还是您只需要与开始值不同的值?我已经编辑了 stackblitz 和这两种可能性的答案,让我知道现在是否可以
    • 是的。 “只需要与开始值不同的值”我认为这将是最优化的解决方案。正确的 ?这些值应该是最终值(真或假),但这些值与起始值不同。
    • 优化我不知道,因为如果你创建一个相同长度的数组,你只需去一个索引来更改值,但如果你删除了更新到的值第一个,你需要获取这个值的当前索引,然后从你的数组中删除它,这样操作就多了。正如我所说,我已经更新了答案,它符合您的要求吗?
    • 你的方法非常好。谢谢。你对操作的数量是正确的。这确实符合我的要求。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2021-05-14
    • 2013-10-23
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多