You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material autocomplete 初次选中API字段不展示选项如何解决

问题原因

你遇到的现象是异步数据源加载时序导致的:

  • 初始化filteredDMOptions过滤流时,API请求还未返回结果,dmOptions是 empty 数组,初始过滤结果为空
  • 输入字符再退格时,valueChanges事件被触发,此时dmOptions已经拿到了API返回的全量数据,所以能正常展示选项

修复方案

1. 调整过滤流初始化时机

将Driver Manager的过滤流初始化逻辑移到API请求成功的回调中,确保dmOptions有值之后再绑定过滤逻辑,同时兼容选中后值为对象的场景,避免调用toLowerCase时报错。

修改后的TS核心代码:

ngOnInit(): void {
  this.initializeForm();
  this.getDriverManagers();

  // 顺带修复Task下拉框的隐性问题:原代码监听的taskControl和表单内的fc_task无关联,改为监听表单控件
  this.filteredTaskOptions = this.sampleForm.get('fc_task').valueChanges.pipe(
    startWith(''),
    map((term) => {
      const searchStr = typeof term === 'string' ? term : term?.name || '';
      return this.taskOptions.filter((task) =>
        task.name.toLowerCase().includes(searchStr.toLowerCase())
      );
    })
  );
}

getDriverManagers() {
  this.mservice.getDriverManagerList().subscribe((data: Drivermanager[]) => {
    this.drivermanagers = data
    this.drivermanagers.sort((a,b) => {
      let fa = a.name.toLowerCase(),
          fb = b.name.toLowerCase();
      if (fa < fb) return -1;
      if (fa > fb) return 1;
      return 0;
    });
    this.dmOptions = this.drivermanagers;
    
    // 数据源加载完成后再初始化过滤流
    const dmControl = this.sampleForm.get('fc_dmanager');
    this.filteredDMOptions = dmControl.valueChanges.pipe(
      startWith(dmControl.value), // 取当前控件值作为初始值,空值时返回全量选项
      map((term) => {
        const searchStr = typeof term === 'string' ? term : term?.name || '';
        return this.dmOptions.filter((dm) =>
          dm.name.toLowerCase().includes(searchStr.toLowerCase())
        );
      })
    );
  })
}

2. 可选优化:点击输入框强制弹出选项

如果需要点击输入框时立刻触发全量选项展示,可以给输入框绑定focus事件手动触发校验更新:

<input matInput [matAutocomplete]="autodm" formControlName="fc_dmanager" style="font-size: 14px;" (focus)="sampleForm.get('fc_dmanager').updateValueAndValidity()">

内容的提问来源于stack exchange,提问作者ChrisMcElyea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:02