【问题标题】:Keep checkbox checked in angular保持复选框选中角度
【发布时间】:2020-07-14 17:35:36
【问题描述】:

使用 angular 9 和一些自定义输入,我做了以下 =>

https://stackblitz.com/edit/angular-ivy-rgsatp

我想阻止用户禁用当前选中的单选按钮,所以我在radio-button.component中更改了以下内容

来自

<label [class]="'radio-container ' + cssClass || ''">
  <div class="radio">
    {{ checked }}
    <input type="checkbox" [checked]="checked" [(ngModel)]="checked" (click)="click()" />
    <span class="checkmark"></span>
  </div>

  <div style="margin-left: 20px;">
    <ng-content></ng-content>
  </div>
</label>

我删除了 ngModel 的绑定以执行 [ngModel]="checked" 并强制输入状态。

https://stackblitz.com/edit/angular-ivy-x2sszw

我面临的问题是,虽然检查保持正确,但 css 没有,我不明白为什么不强制检查。

【问题讨论】:

  • 使用 ngclass 指令。这应该可以解决问题。
  • 是的,我走了这条路,谢谢

标签: javascript html angular


【解决方案1】:

勾选和取消勾选是浏览器事件,或许你应该使用event.preventDefault()来停止浏览器的默认行为

喜欢

<input type="checkbox" [checked]="checked" [ngModel]="checked" (click)="click($event)" />

click(event): void {
  if (this.checked) {
    event.preventDefault();
  }
  if (!this.disabled) {
    this.checked = true
    this.emitChange()
  }
}

堆栈闪电战

https://stackblitz.com/edit/angular-ivy-pomkvy

我还要补充两点

  1. 不要像示例this.disabled 那样添加不必要的变量。因为 Angular 在每个事件上都运行它的周期。所以它可能会影响性能
  2. 使用单选而不是复选框,这样会更容易

【讨论】:

  • 我的角度变化检测是 onpush,我有一个自定义禁用和使用 checbox,因为我需要调整输入的工作方式(就像角度材料正在做的那样),是的不是最好的,但它是限制使用本地广播。感谢您的回答,我确实忘了防止默认
【解决方案2】:

这样试试

<label [class]="'radio-container ' + cssClass || ''">
  <div class="radio">
    {{ checked }}
    <input type="checkbox" [checked]="checked" [ngModel]="checked" (click)="click()" [attr.disabled]="checked ? true : null" />
    <span class="checkmark"></span>
  </div>

  <div style="margin-left: 20px;">
    <ng-content></ng-content>
  </div>
</label>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多