angular - 在 Angular 中获取自动完成占位符和 formControlName
问题描述
根据文档中的示例,我正在使用带有输入的mat-autocomplete组件,并且我已经使用占位符和formControlName配置了输入,如下所示:
<mat-form-field class="example-full-width">
<input type="text" placeholder="Persona*" aria-label="Number" matInput formControlName="idPersona"
[matAutocomplete]="autoPersonas">
<mat-autocomplete autoActiveFirstOption #autoPersonas="matAutocomplete"
[displayWith]="displayPersona(filteredOptionsPersonas | async)" (optionSelected)="selectedValue($event)">
<mat-option *ngFor="let option of filteredOptionsPersonas" [value]="option.idPersona">
<p>{{option.nombre}}</p>
</mat-option>
</mat-autocomplete>
</mat-form-field>
我还使用optionSelected从 mat-autocomplete发出MatAutocompleteSelectedEvent以保持视图值(选择的选项)、值、formControlName 和占位符。问题是我无法从事件对象MatAutocompleteSelectedEvent到达最后两个(formControlName 和占位符) 。有没有办法达到这些属性?
解决方案
您可以将它们传递给optionSelected
.
所以方法签名可以更改为selectedValue(autoCompleteEvent: MatAutocompleteSelectedEvent, placeholder: string, controlName: string )
在您的模板中:(optionSelected)="selectedValue($event, 'Persona*', 'idPersona')"
.
在这里猜测一下,但是如果您的用例是清理控件,那么您可以在控制器中通过订阅控件更改来完成它,并像这样进行观察:
this.formGroup.get('idPersona').valueChanges.subscribe(() => {
this.formGroup.get('idPersona').setValue(null, {emitEvent: false});
});
将值设置为空字符串或 null/undefined 将使占位符重新出现。
推荐阅读
- symfony - symfony 服务会自动执行 Mercure 二进制文件吗?
- python - 修改索引由不带 for 循环的列表定义的列表元素
- reactjs - 显示/隐藏 div onClick
- javascript - Vue 3 - Typescript - 对象可能为空问题
- ionic-framework - 离子光总结算法的建议
- apache-spark - 在 Openshift 上使用 spark-submit 以使用特定的 Worker 节点
- python - 如何限制图表上显示的列数
- ada - 对于可能在函数或过程中释放的访问类型,如何处理 **Post** 合约中的“旧”属性?
- java - Hibernate Search + Elasticsearch - 请求中的version_type - 如何实现
- python - 模式验证错误 FastAPI & pydantic