我正在尝试使用材料自动完成和 ngTemplateOutlet 创建一组自定义模板,以切换我想使用哪个模板来显示结果(例如,如果有分组结果,它们的显示方式将与传统的自动完成选项不同)。
ngTemplateOutlet 似乎仅在提供默认选项时才呈现模板。如果没有至少一个 mat-option 存在,似乎无法将选项直接附加到 mat-autocomplete。理想情况下,唯一呈现的选项是从组件中获取的选项(在一个更复杂的示例中,以下代码很简单,并且仍然复制了问题)。本质上,我正在寻找一种解决方法。
我已经尝试了所有我能想到的关于 ng-container 和模板的变体。
例如,使用模板
<ng-template #default let-options="options">
<mat-option *ngFor="let option of options" [value]="option">
{{option}}
</mat-option>
</ng-template>
这不会呈现任何自动完成选项
<mat-autocomplete #auto="matAutocomplete">
<ng-container *ngTemplateOutlet="default; context:{options: options}"></ng-container>
</mat-autocomplete>
但是,通过包含至少一个 mat-option,这会呈现所有这些
<mat-autocomplete #auto="matAutocomplete">
<mat-option>Test</mat-option>
<ng-container *ngTemplateOutlet="default; context:{options: options}"></ng-container>
</mat-autocomplete>
这是一个堆栈闪电战: https ://stackblitz.com/edit/angular-bz45ae ?file=app/autocomplete-simple-example.html