以下解决方案对我有用。希望这对某人有所帮助。
我添加了 AutocompletePositionModule 模块。
然后添加指令并在我的项目中的许多地方使用。
模块文件
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AutocompletePositionDirective } from './autocomplete-position.directive';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
@NgModule({
declarations: [
AutocompletePositionDirective
],
exports: [
AutocompletePositionDirective
],
imports: [
CommonModule,
MatAutocompleteModule,
]
})
export class AutocompletePositionModule { }
指令文件
import { Directive, Input, OnDestroy } from '@angular/core';
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
@Directive({
selector: '[appAutocompletePosition]',
exportAs : 'appAutocompletePosition'
})
export class AutocompletePositionDirective implements OnDestroy {
public constructor(
private readonly matAutocompleteTrigger: MatAutocompleteTrigger,
) {
window.addEventListener('scroll', this.scrollEvent, true);
}
public ngOnDestroy(): void {
window.removeEventListener('scroll', this.scrollEvent, true);
}
private scrollEvent = (): void => {
if (this.matAutocompleteTrigger == null) {
return;
}
if (this.matAutocompleteTrigger.panelOpen) {
this.matAutocompleteTrigger.updatePosition();
}
}
}
用法
<input type="text" matInput [matAutocomplete]="auto" #trigger="matAutocompleteTrigger" appAutocompletePosition="trigger" />