【问题标题】:How to add third state to checkbox?如何将第三个状态添加到复选框?
【发布时间】:2018-08-27 19:45:15
【问题描述】:

您好,我正在用 Angular 开发 Web 应用程序。我正在显示具有三种状态的复选框。我正在使用 CSS 类来区分状态。三个状态是交叉标记,检查标记和空白。下面是实现部分。

<div *ngIf="node.data.checked==true && node.data.allow==true">
    <label class="container">
        <input (change)="check(node, !node.data.checked)" type="checkbox" [indeterminate]="node.data.indeterminate" [checked]="node.data.checked">
        <span class="checkmark"></span>
        {{ node.data.name }}
    </label>
</div>

<div *ngIf="node.data.checked==true && node.data.allow==false">
    <label class="container">
        <input (change)="check(node, !node.data.checked)" type="checkbox" [indeterminate]="node.data.indeterminate" [checked]="node.data.checked">
        <span class="checkmark xmark"></span>
        {{ node.data.name }}

    </label>
</div>

<div *ngIf="node.data.checked==false">
    <label class="container">
        <input (change)="check(node, !node.data.checked)" type="checkbox" [indeterminate]="node.data.indeterminate">
        <span class="checkmark"></span>
        {{ node.data.name }}

    </label>
</div>

我在上面附上了 UI 图片。

设备型号1 包含交叉标记,设备型号2 包含复选标记,设备型号4 包含空白。这是三种状态。现在,当用户单击任何一个复选框时,该复选框的状态应在以下路径中发生变化。

blank --> checked --> cross --> blank

上面是圆形路径。例如,如果复选框被选中,那么当用户单击它时,复选框应该变为交叉,如果用户再次单击它,则为空白,如果用户再次单击它,则再次选中,依此类推。显示我已经完成的部分。有人可以像我上面所说的那样帮助我完成这项工作吗?任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 查看css-tricks.com/almanac/selectors/i/indeterminate 了解有关不确定状态的基本指南
  • 感谢您的帮助。在 javascript 中,我们使用切换(this)发送复选框。我怎样才能在角度做到这一点?
  • 当您需要“循环”路径时,使用“余数”运算符:cb.checked=(cb.checked+1)%3 为您提供 0,1,2,0,1, 2,0,1,2...

标签: angular checkbox


【解决方案1】:

您可以为此使用checkbox indeterminate state

如果你绑定到change 事件,你可以传递复选框,像这样

<input type="checkbox" (change)="toggle($event.target)" />

然后您可以创建切换功能,如上面的链接:

toggle(cb) {
  if (cb.readOnly) cb.checked = cb.readOnly = false;
  else if (!cb.checked) cb.readOnly = cb.indeterminate = true;
}

Here is a StackBlitz demo

【讨论】:

  • 它有效。谢谢。但是当绑定数据时我应该这样做吗?只读=“只读”?
  • 你应该可以使用[indeterminate]="true"进行绑定,也可以使用[(ngModel)]
  • 将数据绑定到复选框时,我做了类似的事情。我想显示中间状态。 {{ node.data.name }} 这不起作用。我可以知道我错过了什么吗?
  • 一切正常。我们可以使用样式编辑中间状态的设计吗?
  • CSS 中有一个 :indeterminate 伪选择器,可能会有所帮助。你想展示什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2022-07-22
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多