首页 > 解决方案 > @ViewChild('tTaskTeam', { read: MatAutocompleteTrigger }) 升级到 V8 后无法正常工作

问题描述

嗨,我今晚将我的项目从 V7 升级到了 V8,我在阅读 @viewChild 时遇到了一堆错误,这是由于他们所做的新更新。我在我的所有@viewChild 中添加了 { static: true },但后来我遇到了我设置的这些触发器:

 @ViewChild('tTaskTeam', { read: MatAutocompleteTrigger }) autoCompleteForTaskTeamTrigger: MatAutocompleteTrigger;
  @ViewChild('tofficeUser', { read: MatAutocompleteTrigger }) officeUsersautoCompleteInputTrigger: MatAutocompleteTrigger;
  @ViewChild('recipientType', { read: MatAutocompleteTrigger })  recipientTypeTrigger: MatAutocompleteTrigger;

只接受两个参数,viewChild我不能添加三个。所以我读了:MatautocompleteTrigger出来,它破坏了我的自动完成功能。

这是我收到的错误消息:

'{ 类型的参数读取:typeof MatAutocompleteTrigger; }' 不能分配给 '{ read?: any; 类型的参数。静态:布尔值;}'。类型“{ 读取:typeof MatAutocompleteTrigger; 中缺少属性“静态”;}' 但在 '{ read?: any; 类型中是必需的 静态:布尔值;}'.ts(2345) core.d.ts(8066, 9): 'static' 在这里声明。

我添加了这些触发器以在用户输入不在所选选项列表中的字符时触发。所以它会清除并给用户一条消息让他们再次选择。

这是完整的实现: HTML

<mat-form-field appearance="outline" class="task-info-form-field">
  <input tab-directive #tTaskTeam matInput (keyup.enter)="chooseFirstOption(autoCompleteForTaskTeam)" [matAutocomplete]="autoCompleteForTaskTeam" formControlName="tTaskTeam" matTooltip="You can search and it will try to autocomplete the name for you!" placeholder="Select Group">
  <mat-autocomplete #autoCompleteForTaskTeam='matAutocomplete' [displayWith]="displayTeamName">
    <mat-option class="matAutoCompleteSelect" *ngFor="let user of filteredOptions | async" [value]="user">
      <span>{{ user.TeamName }}</span>
    </mat-option>
  </mat-autocomplete>
  <mat-error>
    Value entered is NOT VALID please selected only from suggested values.
  </mat-error>
</mat-form-field>

TS

@ViewChild(MatAutocomplete, {
  static: true
}) autoCompleteForTaskTeam: MatAutocomplete;

@ViewChild('tTaskTeam', {
  read: MatAutocompleteTrigger
}) autoCompleteForTaskTeamTrigger: MatAutocompleteTrigger;

subscriptionTeam: Subscription;

ngAfterViewInit() {
  this._subscribeToClosingActions();
  this._subscribeToClosingActionsThree();
  this._subscribeToClosingActionsTwo();
}

ngOnDestroy() {
  if (this.subscription && !this.subscription.closed) {
    this.subscription.unsubscribe();
  }
  if (this.subscriptionTeam && !this.subscriptionTeam.closed) {
    this.subscriptionTeam.unsubscribe();
  }
  if (this.subscriptionUser && !this.subscriptionUser.closed) {
    this.subscriptionUser.unsubscribe();
  }
}


private _subscribeToClosingActions(): void {
  if (this.subscriptionTeam && !this.subscriptionTeam.closed) {
    this.subscriptionTeam.unsubscribe();
  }

  this.subscriptionTeam = this.autoCompleteForTaskTeamTrigger.panelClosingActions
    .subscribe(e => {

        if (!e || !e.source) {
          this.form.controls.tTaskTeam.setValue('');
        }
      },
      err => this._subscribeToClosingActions(),
      () => this._subscribeToClosingActions());
}

标签: angularangular7upgradeangular8

解决方案


应该是

@ViewChild('tTaskTeam', { 读取: MatAutocompleteTrigger, 静态: false}) autoCompleteForTaskTeamTrigger: MatAutocompleteTrigger;


推荐阅读