(角度)使checkox禁用或启用<mat-slide-toggle>

时间:2019-01-07 17:16:06

标签: javascript angular angular-material

我有一个用户列表可供选择。假设我选择了一个用户,那么他在团队中可以是活跃的或不活跃的。现在,如果我根本不选择他,那么我应该既不能激活他,也不能使其失效。 这是由复选框和滑块完成的,如下所示:

enter image description here

当我单击复选框时,我需要禁用切换。我尝试通过以下方式进行此操作:

$("#2048").prop('disabled', true);

document.querySelector('[name="' + '#2048' + '"]').disabled = true;

也不起作用(是的,我知道ID不应为数字,但这是因为每个切换都在* ngFor内。不过,我仍可以将它们用作数字,因为jQuery仍然可以选择它们)。

无论哪种方式,我都坚信做到这一点的唯一方法是将“ disabled”属性数据绑定为一些返回“ true”或“ false”值的后端变量。

类似的东西:

<mat-slide-toggle 
[id]='data.id' 
class="status" 
[disabled]='disableVariable'
>Active
</mat-slide-toggle>

然后:

disableVariable = someFunction(); //that returns true or false

这有效,但是变量太通用了,我的意思是,每个滑块都将被禁用。另一个问题是,这不是“实时”的,因此我无法多次禁用和启用。
基本上,它不起作用。

我在这里应该做什么?如果我有办法使用其唯一ID选择这些标签,那将解决此问题,但是jQuery或Javascript的Query选择器都不能禁用或启用此标签。

编辑:

更多我的代码:

    <div id="table" *ngFor="let data of User; let i = index">

        <div [id]='data.id' *ngIf='data.user== 0' class="item">

            <label class="container" style="width: 90%">

                <input
                type="checkbox" 
                *ngIf='data.status== 0' 
                id={{i}} 
                class="checkbox" 
                color=primary
                checked>

                <span class="checkmark"></span>

                <div *ngIf='data.status== 0'>{{data.name}}

                    <mat-slide-toggle 
                    [id]='data.id' 
                    (change)=toggle(data.id) 
                    *ngIf='data.status== 0'
                    color=primary 
                    class="status" 
                    >Active
                    </mat-slide-toggle>

                </div>
            </label>
        </div>
    </div>

当我添加([ngModel)]时,我的复选框停止工作,是的,我正在导入FormsModule

2 个答案:

答案 0 :(得分:3)

您可以使用双向绑定来更新复选框的状态,如下所示:

在输入字段中添加[(ngModel)]和禁用的属性

// Declare variable in component
CheckboxVar:boolean;

// In Html write below code
<input type="checkbox" [(ngModel)]="CheckboxVar" [disabled]="!CheckboxVar">

// Disabled checkbox when checkboxvar = false;
<input type="checkbox" [disabled]="!CheckboxVar">

根据需要在组件中更新CheckboxVar变量。

带有mat-slide-toggle的示例

TS代码:

checked = false;
disabled = false;

HTML代码:

<input type="checkbox" [(ngModel)]="checked">
<mat-slide-toggle [disabled]="checked">
    Slide me!
</mat-slide-toggle>

现在在上面的示例中,如果选中了选中的复选框,则选中的变量将被更新,如果选中的值为true,则将禁用切换。

答案 1 :(得分:0)

如果我正确理解要求:

HTML代码:

<div *ngFor="let obj of list">
  <mat-checkbox [(ngModel)]="obj.inTeam">In Team</mat-checkbox>
  <br><br>
  <mat-slide-toggle [(ngModel)]="obj.inTeam">Active</mat-slide-toggle>
</div>

TS代码:

list = [
    { id : 1,inTeam: false, isActive: false },
    { id : 3,inTeam: false, isActive: false },
    { id : 3,inTeam: false, isActive: false },
    { id : 4,inTeam: false, isActive: false }
]

StackBlitz