[英]mat-select selectionChange get group angular
我有两个mat-optgroup
组的控制mat-select
,它们有一个事件处理程序(selectionChange)="applicationSelected($event.value, i)
。
如何检测从哪个组中选择了选项?
没有一种简单、直接的方法可以从selectionChange
事件中了解组。 它只告诉您来源 (MatSelect) 和选定的值。 但是 MatOption 的onSelectionChange
事件使您可以访问 MatOption,而后者又可以访问 MatOptionGroup。 例如:
<mat-option (onSelectionChange)="optionSelected($event)" ...>...</mat-option>
optionSelected(event: MatOptionSelectionChange) {
console.log(event.source.group.label);
}
我也遇到了这个问题,但请记住, onSelectionChanged() 的预期行为如下: 选择更改事件不仅在选择选项时触发,而且在取消选择时触发。 因此,选择选项后,将触发两个事件:用户选择和现在取消选择的选项。 因此,您将看到 2 个事件被触发。 其中第一个是所需的。 您可以查看 event.isUserInput 是否设置为 true(所需事件)并将 group.name 发送到事件处理程序:
在您的组件 html 中:
<mat-select formControlName="category" required> <mat-optgroup *ngFor="let group of categoryGroups" [label]="group.name"> <mat-option *ngFor="let category of group.options" [value]="category.value" (onSelectionChange)="onCategorySelection($event, group.name)"> {{category.viewValue}} </mat-option> </mat-optgroup> </mat-select>
以及您绑定到组件类中的事件的函数:
onCategorySelection(event: MatOptionSelectionChange, groupName: string) { if (event.isUserInput) { this.groupName = groupName; // event.source.group.label; } }
我还认为 mat-feature 不能轻松访问组值,这有点有趣,因为 group 的所有想法都是将选择选项分离到某些组,并且在许多情况下,用例是在使用所选选项对组数据进行逻辑级别处理。
这是我的解决方案:
<mat-form-field >
<mat-label>Filter By</mat-label>
<mat-select panelClass="" #choosedValue (valueChange)="doSomething1(choosedValue.value)" >
<mat-option >-- None --</mat-option>
<mat-optgroup #group1 *ngFor="let group of filterData" [label]="group.viewValue"
style = "background-color: #0c5460">
<mat-option #mmm *ngFor="let option of group.options" [value]="{value: option.value, groupValue: group.value}" >
{{option.viewValue}}
</mat-option>
</mat-optgroup>
</mat-select>
</mat-form-field>
和功能:
doSomething1(value: any){
console.log("do something with ", value);//result: {value: "Honda", groupValue: "cars"}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.