有人可以向我解释一下MatAutocompleteTrigger
是如何运作的?
@ViewChild('autocompleteInput', { read: MatAutocompleteTrigger }) triggerAutocompleteInput: MatAutocompleteTrigger;
<mat-form-field>
<input
#autocompleteInput
matInput
placeholder="Label"
formControlName="label"
[matAutocomplete]="autocompletePanel"
>
</mat-form-field>
<mat-autocomplete #autocompletePanel="matAutocomplete" [displayWith]="displayFn">
<mat-option
*ngFor="let item of items | async"
[value]="item.label"
>
{{ item.label }}
</mat-option>
</mat-autocomplete>
this.triggerAutocompleteInput.optionSelections.subscribe(option => {
console.log('Im gonna kill myself', option );
});
它没有做任何事情。我可以整天选择选项,什么都不会解雇。 当我点击某个选项时,订阅是否不应该接收数据? this.triggerAutocompleteInput.panelClosingActions
只有在您自动完成面板处于活动状态并且以模糊关闭它时才有效。
我不了解这种行为,我也不了解文档。
如果您需要通过nativeElement
访问输入呢?如果我将MatAutocompleteTrigger
用作SELECT SUBSTRING('H345678_30',4,CHARINDEX('_','H345678_30')-4)
,我就无法做到这一点告诉。
我疯了。
答案 0 :(得分:1)
首先,一些前言:
MatAutocompleteTrigger
主要用作模板指令。它“保存”输入元素,并提供一个点来呈现其他地方定义的MatAutocomplete
选项。
optionSelections
将发出一个值流,但不会发出空值。它是来自MatAutocompleteComponent
的流。在您的组件中,当自动完成组件完成了自己的生命周期逻辑时,您需要subscribe
到发射器afterContentInit
。
接下来,您似乎将[value]
绑定到let item.label
。你不需要把let
放在那里;这只是声明一个未赋值的变量,相当于null
。由于optionSelections
会发出与该选项相关联的此[value]
,并且由于此处传递的值为null,因此您不会获得任何排放。
最后,由于选项选项已为MatAutocompleteComponent
所知,但仅通过引用MatAutocompleteTrigger
传递,因此我认为最好从MatAutocompleteComponent
获取这些事件,部分因为这些属性属于该组件,但主要是因为MatAutocompleteComponent
有自己的(optionSelected)
EventEmitter可以模板绑定:
<mat-form-field>
<input
#autocompleteInput
matInput
placeholder="Label"
formControlName="label"
[matAutocomplete]="autocompletePanel"
>
</mat-form-field>
<mat-autocomplete #autocompletePanel="matAutocomplete" [displayWith]="displayFn" (optionSelected)="doStuff($event)">
<mat-option
*ngFor="let item of items | async"
[value]="item.label"
>
{{ item.label }}
</mat-option>
</mat-autocomplete>
public doStuff(e: MatAutocompleteSelectedEvent) { /* stuff */ }
此外,您exercise.label
绑定了<mat-option>
模板值。不确定这是否是一个错字,但在您提供的代码中exercise
未在任何地方定义。