【问题标题】:Mat-checkbox [checked]=“false” does not workMat-checkbox [checked]=“false”不起作用
【发布时间】:2020-04-28 10:54:04
【问题描述】:

尝试实现一个复选框,我可以在其中动态设置值(并让它出现在框中)。

HTML

<mat-checkbox *ngIf="isReply()" class="col-2" formControlName="checkbox" [checked]="false"  >CheckBox off</mat-checkbox> 
<mat-checkbox *ngIf="!isReply()" class="col-2" formControlName="checkbox"  >CheckBox</mat-checkbox> 

materials.module.ts

addCheckbox() {
      this.checkboxForm = this.fb.group({
        'CheckBox':true,

main.module.ts

isReply(): boolean { 
  return: true;
}

有一个单选按钮可以打开和关闭 isReply()。

当我打开 isReply() 时,我可以看到 CheckBox 标签从“CheckBox”变为“CheckBox off”,但复选框状态(可见)没有改变。

我可以应用其他逻辑来响应复选框被关闭,即使复选框仍然可见检查(真)。这会将复选框的值更改为 false,即使复选框仍处于可见选中状态 (true)。

当我单击复选框(清除可见框)时,值切换并且响应如预期的那样,即使未选中该框,复选框的值现在也是 true。


我做了以下更改,但仍然不起作用

adjust this to: 

<div class="row" *ngIf="isReply()">
 <mat-checkbox class="col-2" formControlName="checkBox" >CheckBox</mat-checkbox> 
</div>
<div class="row" *ngIf="!isReply()">
 <mat-checkbox class="col-2" [checked]='true' 
         formControlName="checkBox" >CheckBox</mat-checkbox>
</div>

在ts中:

addCheckbox() {
      this.checkboxForm = this.fb.group({
        'checkBox':false,

我有两个单选按钮(标准和回复)。

单选按钮的 html:

<form [formGroup]="materials.SignatureType">
  <mat-radio-group formControlName="sigtype" >Signature Type: &nbsp;
  <label><input type="radio" value="standard" formControlName="sigtype">
  <span>&nbsp;Standard</span>
  </label>
<label><input type="radio" value="reply" (click)="setBoxes()" formControlName="sigtype" >
 <span>&nbsp;Reply</span>
 </label>
</mat-radio-group> 

setBoxes() 的代码:

if (this.isReply) {
      this.materials.checkboxForm.value.checkBox = false;
    }
    else {
      this.materials.checkboxForm.value.checkBox = true;
    }

单击“回复”单选按钮会更改复选框的值,但不会更改按钮的状态。

除了单击复选框外,我无法更改按钮状态。

不推荐使用 Angular 7.2.3 [(ngModel)]。

【问题讨论】:

  • 你为什么使用checked属性?
  • 我正在尝试找到一种将复选框值设置为 false 的方法。接受建议。
  • 您必须使用 setValue 或 patchValue 来设置输入控件的值。检查这个:angular.io/guide/reactive-forms#patching-the-model-value
  • 我尝试实现以下:&lt;mat-checkbox *ngIf="!isReply()" class="col-2" formControlName="checkBox" [checked]="setValue('checkBox', true)" &gt; &lt;mat-checkbox *ngIf="isReply()" class="col-2" formControlName="checkBox" [checked]="setValue('checkBox', false" &gt; 并添加了以下功能:setValue(checkBox: string, value: boolean) { let status; ... logic to process checkBox and value ... console.log(checkBox + " status: "); console.log(status); } 仍然没有乐趣
  • 这样设置状态不起作用:this.materials.checkboxForm.value.checkBox.setValue(true);

标签: javascript html angular checkbox angular-material-stepper


【解决方案1】:

我的项目遇到了这个问题。

我已将复选框与[checked]=... 连接起来,但我有任务让它按预期工作。将未选中的项目显示为opacity: 40%;,并在选中的项目旁边打勾。

例如。有时会有一个复选框没有选中项,或者有多个复选框,或者一个选中项没有选中框……很奇怪。

我的结论;它以编程方式设置并且被点击操作覆盖。

TLDR;

我的解决方案; 通过指定更改模块提供程序中的点击操作配置:

MAT_CHECKBOX_CLICK_ACTION, useValue: 'noop'

这会将任何点击操作留给开发人员实施。

查看文档以获取更多信息 -> https://v6.material.angular.io/components/checkbox/overview

【讨论】:

【解决方案2】:

尝试: 在你的 component.html <div class="container-fluid p-5 mt-2 mb-2" > <mat-checkbox class="col-2" [checked]="var1" >CheckBox off</mat-checkbox> <mat-checkbox class="col-2" [checked]="var2" >CheckBox</mat-checkbox> </div>

在您的 component.ts 文件中 var1 = false; var2 = true

您只需要绑定 checked 属性,然后您就可以在您的逻辑中更改 var1var2 的值。

【讨论】:

  • 确实有效。添加建议后,如果我将以下内容放入 isReply() console.log("CheckBox status: "); console.log(this.materials.checkboxForm.value.CheckBox);我得到以下响应: CheckBox status: main.component.ts:250 ƒ Boolean() { [native code] }
  • 我已经更新了我的答案,如果适合你,请告诉我。
  • 不确定绑定检查属性是什么意思:在 materials.module.ts addCheckbox() { this.checkboxForm = this.fb.group({ 'checkBox': Boolean, 我可以将 checkBox 设置为 true 或 false 并确定加载时框的状态,但我不能通过用户交互(而不是单击框)更改框的状态。
  • Angular 应用程序中的数据绑定是模型和视图组件之间数据的自动同步。
  • 我没有看到要查看的数据同步。编辑了最初的示例,但仍然没有乐趣。
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2019-11-25
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
相关资源
最近更新 更多