[英]How to bind mat-autocomplete on change of other mat-autocomplete?
[英]How to enable/visible mat-autocomplete only if condition gets true
更新
使用THIS解决方案在一个字段中创建用户输入弹出表单,尝试进行自动完成。
我想自动完成功能工作得很好,问题是选项不在输入框下方。
代码:
<div>
<div class="modal-header">
</div>
<div class="modal-body">
<form novalidate [formGroup]="myform">
<div class="form-floating form-group">
<input type="text" class="form-control" id="fltName" placeholder="Pick one" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
<label for="fltName">Name</label>
<mat-autocomplete autoActiveFirstOption #emp="matAutocomplete" class="form-control">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option">
{{option}}
</mat-option>
<mat-autocomplete>
</div>
问题:
1 . 选项框应该显示,只有当有 2 个或更少的匹配项时?
2 . 通过插入 emp_id 返回 emp 名称选项?
我如何设置选项,例如{name:xyz, emp_id:123, emp_no:333}
,如果我发短信任何值应该给 name 作为选项,如果我写33
应该带选项xyz
。
问题 1:选项框应该显示,只有当有 2 个或更少的匹配项时
为此,您需要应用 ng-container(避免呈现选项框)指令并根据您的要求应用长度条件。
<mat-autocomplete #auto="matAutocomplete">
<ng-container *ngIf="filteredOptions && (filteredOptions | async)?.length <= 2">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option" >
{{option.name}} //this is the value you always want to display
</mat-option>
</ng-container>
</mat-autocomplete>
问题 2:通过插入 emp_id 返回 emp 名称选项?
第二部分可以通过在必填字段上应用过滤器来实现,即
private _filter(value: string): string[] {
if(value && value !== ""){
const filterValue = value.toLowerCase();
return this.options.filter(option => option.name.toLowerCase().includes(filterValue) || option.emp_no.toString().startsWith(filterValue));
} else {
return [];
}
}
除此之外,您还需要修复 pipe 部分,您必须在 RxJs startWith运算符中传递控制值,例如,
this.filteredOptions = this.myControl.valueChanges
.pipe(
startWith(this.myControl.value),
map(value => this._filter(value))
);
注意:您可以在此处访问工作解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.