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

md-autocomplete调用findUser获数据但下拉为空(无下拉)的修复咨询

我来帮你解决Angular Material md-autocomplete下拉菜单为空的问题,看了你的代码,主要有几个关键问题需要调整:

1. 修正$http响应的数据提取

你在findUser方法里直接返回了data,但$http的then回调参数其实是完整的响应对象,真正的后端返回数据在response.data属性里。如果后端返回的是用户数组,得正确提取这部分:

this.findUser = function (query) {
  return $http({
    method: 'POST',
    url: apiUrl() + 'user',
    data: query
  }).then(function (response) {
    // 提取后端返回的用户数组,赋值给self.data并返回
    self.data = response.data;
    return self.data;
  });
};

2. 修复md-item-text的绑定问题

你当前的md-item-text="ctrl.formatUser(item)"有两个问题:一是控制器里根本没定义formatUser方法,二是这个指令需要绑定到能生成字符串的表达式。

如果只是要显示用户的 lastName,直接改成:

md-item-text="item.lastName"

如果需要格式化显示(比如 lastName + firstName),先在控制器里添加格式化方法:

// 在order控制器里添加这个方法
self.formatUser = function(item) {
  // 根据你的用户对象结构调整这里的属性
  return `${item.lastName} ${item.firstName}`;
};

然后把html里的md-item-text改成:

md-item-text="ctrl.formatUser(item)"

3. 确保后端返回的是数组

md-autocomplete要求md-items绑定的是一个数组,所以必须确认你的后端接口返回的是用户对象的数组,而不是单个对象或者嵌套的结构。如果后端返回的是类似{code: 200, data: [...]}的结构,那你需要在then回调里提取response.data.data返回。

4. 检查浏览器控制台的报错

打开浏览器开发者工具的控制台,看看有没有Angular相关的报错(比如找不到方法、数据类型错误),这些报错会直接阻止下拉菜单渲染,也是排查问题的关键。

修改后的完整控制器代码片段:

angular.module('orders').controller('order', function ($scope, $http) {
  var self = this;
  self.data = null;
  self.selectedItem = null;
  self.searchText = null;

  // 添加格式化方法
  self.formatUser = function(item) {
    return item.lastName; // 按需调整
  };

  this.findUser = function (query) {
    return $http({
      method: 'POST',
      url: apiUrl() + 'user',
      data: query
    }).then(function (response) {
      self.data = response.data;
      return self.data;
    });
  };
  // ... 其他代码
});

修改后的md-autocomplete标签:

<md-autocomplete flex="85" md-selected-item="ctrl.selectedItem"
  md-search-text="ctrl.searchText"
  md-items="item in ctrl.findUser(ctrl.searchText)"
  md-item-text="ctrl.formatUser(item)"
  md-delay="300"
  md-floating-label="Search supplier representative">
  <div layout="row" class="item" layout-align="start center">
    <span md-highlight-text="ctrl.searchText">{{item.lastName}}</span>
  </div>
</md-autocomplete>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:35:11