我们希望有条件地以Angular 显示自动完成的表单,例如,当用户单击按钮时,表单将显示,该按钮将变为不可见(实际上,我们的设计当然更复杂).为此,最直观的做法似乎是有条件地渲染组件,例如使用@if
:
@if(!showForm){
<button (click)="showForm=true">show form</button>
}
@if(showForm) {
<form class="example-form">
<mat-form-field class="example-full-width">
<mat-label>Number</mat-label>
<!-- #docregion input -->
<input
type="text"
placeholder="Pick one"
aria-label="Number"
matInput
[formControl]="myControl"
[matAutocomplete]="auto"
/>
<mat-autocomplete #auto="matAutocomplete">
@for (option of options; track option) {
<mat-option [value]="option">{{option}}</mat-option>
}
</mat-autocomplete>
</mat-form-field>
</
但这有一个小缺陷,即表单一呈现,MAT输入的标签就会上移到输入字段的顶部(类似于在空输入字段中输入内容时).对于其他组件,例如没有自动完成的输入,不会出现此问题.这是一张stackblitz link美元的支票.
经过多次调试,我们发现只需有条件地设置display=none
,而不是用@if
隐藏部分html,就可以防止出现这种情况.但我有兴趣知道为什么会这样?有没有比display=none
更好的办法来避免这个问题?
任何帮助都非常感谢.