javascript - 如何手动取消选中/选中 primeng 复选框

标签 javascript html angular checkbox primeng

html

<p-checkbox name="showLinkedRisksOnly" id="showLinkedRisksOnlyChkBx" 
   label="Show Only Linked Risks" binary="true" (click)="showOnlyLinkedRisks($event)"
   [ngModel]="showLinkedRisksOnly" ></p-checkbox>

typescript

showOnlyLinkedRisks($event){
  if(condition){
    this.showLinkedRisksOnly = !this.showLinkedRisksOnly;
  }
}

我正在尝试根据条件将复选框的状态更改回选中/取消选中之前。但由于某种原因,当我更改 this.showLinkedRisksOnly 的值时,复选框和模型不同步。 是否可以实现

最佳答案

方法 1 - 处理 ngModelChange + 触发更改检测

要使复选框只读,您可以处理 ngModelChange 事件:

<p-checkbox ...
  [ngModel]="showLinkedRisksOnly" 
  (ngModelChange)="showOnlyLinkedRisks($event)">
</p-checkbox>

并在事件处理程序中执行以下步骤:

  1. 设置新值
  2. 如果复选框是只读的
  3. 触发变化检测
  4. 放回原来的值
constructor(private cd: ChangeDetectorRef) { }

showOnlyLinkedRisks(value) {
  this.showLinkedRisksOnly = value;    // Set the new value
  if (!this.condition) {               // If the checkbox is readonly
    this.cd.detectChanges();           // Trigger change detection
    this.showLinkedRisksOnly = !value; // Put the original value back
  }
}

参见this stackblitz进行演示。


方法2-双向绑定(bind)+禁用控制

另一种方法是使用双向绑定(bind),并禁用控件以防止更改:

<p-checkbox ...
  [(ngModel)]="showLinkedRisksOnly" 
  [disabled]="!condition">
</p-checkbox>

参见this stackblitz进行演示。

关于javascript - 如何手动取消选中/选中 primeng 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947270/

相关文章:

javascript - 高级 Ramda 数组转换

jquery - 如何在背景上正确定义 .overlay 类的高度?

javascript - Angular 7 - 创建具有独立范围且具有 Angular 样式的组件背后的机制是什么?

angular - 使用 *ngFor 访问对象的键和值

Angular 2 rc 1 可以激活

javascript - 如何将 Mocha 与 Promises/ES6 生成器一起使用?

javascript对象组合语法

javascript - Firebase 模块在 Svelte 中导致 'registerComponent' 错误

javascript - 每个循环内表单上的 Rails Ajax 具有嵌套资源和 html 类

javascript - 二维数组 Javascript