Mat*_*ers 8 angular-material2 angular
我需要修改标准Angular Material切换按钮组件的功能,以便单击活动按钮可使该组件返回没有按钮处于活动状态。这有两个步骤:
我尝试了几种方法,例如
模板:
<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>
Run Code Online (Sandbox Code Playgroud)
JS:
update_toggle(group,button){
if(group.value==""){
group.value = button.value;
}
else
{
group.value = "";
}
button.checked=!button.checked;
}
Run Code Online (Sandbox Code Playgroud)
但这不会更新按钮的“已检查”值,我想是因为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>
Run Code Online (Sandbox Code Playgroud)
但是单个按钮上的两次单击事件感觉很棘手,特别是因为第二次单击中的三进制与本能地相反。
有什么更好的建议吗?
我试过了:
@ViewChildren('no_btn') no_btn: ElementRef;
Run Code Online (Sandbox Code Playgroud)
然后:
this.no_btn['_results'][k]['_inputElement']['nativeElement']['checked']=false;
Run Code Online (Sandbox Code Playgroud)
但是结果似乎与在函数中传递按钮引用没有什么不同。再次单击该按钮不会取消选中它。禁用确实有效,所以我认为我的代码是正确的:
this.no_btn['_results'][k]['_inputElement']['nativeElement']['disabled']=true;
Run Code Online (Sandbox Code Playgroud)
一个简单的通用解决方案不需要使用每个按钮上的事件或单击事件,也不需要ViewChildren或对值进行硬编码检查,可以在多种模式下使用按钮切换并通过组更改来管理选择事件。change事件为您提供了所需的一切,因此无需直接访问子组件:
<mat-button-toggle-group multiple (change)="toggleChange($event)">
<mat-button-toggle value="no">No</mat-button-toggle>
<mat-button-toggle value="yes">Yes</mat-button-toggle>
</mat-button-toggle-group>
toggleChange(event) {
let toggle = event.source;
if (toggle) {
let group = toggle.buttonToggleGroup;
if (event.value.some(item => item == toggle.value)) {
group.value = [toggle.value];
}
}
}
Run Code Online (Sandbox Code Playgroud)
它在Stackblitz上。
归档时间: |
|
查看次数: |
7740 次 |
最近记录: |