【发布时间】:2018-12-19 07:06:19
【问题描述】:
我需要修改标准Angular Material toggle button component 的功能,以便单击活动按钮将组件返回到没有按钮处于活动状态的状态。这有两个步骤:
- 更新切换组的值
- 将单击按钮的“checked”参数更改为 false
我尝试了几种方法,例如
模板:
<mat-button-toggle-group #group="matButtonToggleGroup">
<mat-button-toggle #no_btn value="no" (click)="update_toggle(group,no_btn)">No</mat-button-toggle>
<mat-button-toggle #yes_btn value="yes" (click)="update_toggle(group,yes_btn)">Yes</mat-button-toggle>
</mat-button-toggle-group>
JS:
update_toggle(group,button){
if(group.value==""){
group.value = button.value;
}
else
{
group.value = "";
}
button.checked=!button.checked;
}
但这不会更新按钮的“已检查”值,我猜是因为 update_toggle() 设置的组值与单击按钮的用户操作相冲突。
唯一有效的方法是:
<mat-button-toggle-group #group="matButtonToggleGroup">
<mat-button-toggle #no_btn value="no" (click)="update_toggle(group,no_btn)" (click)="group.value=='no' ? checked=false : checked=false">No</mat-button-toggle>
<mat-button-toggle #yes_btn value="yes" (click)="update_toggle(group,yes_btn)" (click)="group.value=='yes' ? checked=false : checked=false">Yes</mat-button-toggle>
</mat-button-toggle-group>
但是单个按钮上的两次点击事件感觉非常糟糕,尤其是第二次点击中的三元与本能应该是相反的。
对更好的方法有什么建议吗?
我试过了:
@ViewChildren('no_btn') no_btn: ElementRef;
然后:
this.no_btn['_results'][k]['_inputElement']['nativeElement']['checked']=false;
但是结果似乎和在函数中传递按钮引用没有什么不同;第二次单击该按钮不会取消选中它。禁用 确实 工作,所以我认为我的代码是正确的:
this.no_btn['_results'][k]['_inputElement']['nativeElement']['disabled']=true;
【问题讨论】:
-
为什么不使用
@ViewChild()'s 来获取复选框的实例并以这种方式进行更改? -
已经尝试过 - 将更新问题。
-
这不会改变按钮本身的值,而不是它是否被选中?还是您指的是组的价值,而不是单个按钮?