解决element建议搜索框fetch-suggestions无法显示内容解决方法

情景:引用elementUI组件里面的建议搜索框时,下拉框显示内容空白。

原因:可能是value值设置的问题,代码如下

html代码:

<el-form-item label="一级客户经理" prop="userNumber1Name">
        <el-autocomplete
          v-model="formlist.userNumber1Name"
          :fetch-suggestions="querySearchAsync"
          placeholder="请输入"
          @select="handleSelect1"
        ></el-autocomplete>
</el-form-item>

js代码:

<script>
export default {
  name: "amendinf",
  },
  data() {
    return {
      // 表单验证
      rules: {
        userNumber1Name: [
          { required: true, message: "一级客户经理不能为空", trigger: "blur" },
        ],
      },
      restaurants: [],
    };
  },
  created() {
    this.lod();
    this.restaurants = this.loadAll();
  },
  methods: {
    // 获取模糊查询的数据
    loadAll() {
      this.$api
        .getusernameList()
        .then((res) => {
          console.log("res", res);
          if(res){
          if (res.data.status == 200 && res.data.data.length > 0) {
            this.restaurants = res.data.data;
            return this.restaurants;
          }
          }

        })
        .catch();
    },
    // 根据输入模糊查询处理
    querySearchAsync(queryString, cb) {
      var restaurants = this.restaurants;

      // 解决element建议搜索框无法显示内容 的数据处理
      for (var i = 0; i < restaurants.length; i++) {
        restaurants[i].value = restaurants[i].userName;
      }
      var results = queryString
        ? restaurants.filter(this.createStateFilter(queryString))
        : restaurants;
      // 调用 callback 返回建议列表的数据
      clearTimeout(this.timeout);
      this.timeout = setTimeout(() => {
        cb(results);
      }, 3000 * Math.random());
    },
    createStateFilter(queryString) {
      return (state) => {
        return (
          state.userName.toLowerCase().indexOf(queryString.toLowerCase()) === 0
        );
      };
    },
    // 选择一级客户经理
    handleSelect1(item) {
      // console.log(item);
      this.formlist.userNumber1 = item.userNumber;
    },

  },
};
</script>

经过querySearchAsync函数里面的 数据处理最终效果实现

### Element UI 中实现搜索框功能 在 Element UI 中,可以通过 `el-input` 组件来快速构建一个基础的搜索框[^1]。如果需要更复杂的交互体验,则可以选择使用 `el-autocomplete` 组件提供自动补全的功能。 以下是基于 Vue 和 Element UI 的代码示例: ```vue <template> <div class="search-container"> <!-- 基础搜索框 --> <el-input v-model="inputValue" placeholder="请输入内容"></el-input> <!-- 自动补全搜索框 --> <el-autocomplete v-model="autocompleteValue" :fetch-suggestions="querySearchAsync" placeholder="请输入内容" @select="handleSelect" ></el-autocomplete> </div> </template> <script> export default { data() { return { inputValue: "", // el-input绑定的数据模型 autocompleteValue: "" // el-autocomplete绑定的数据模型 }; }, methods: { querySearchAsync(queryString, cb) { const results = queryString ? this.filterResults(queryString) : []; clearTimeout(this.timeout); this.timeout = setTimeout(() => { cb(results); }, 300); // 设置延迟时间以优化性能 }, filterResults(queryString) { // 模拟数据过滤逻辑 const mockData = ["苹果", "香蕉", "橙子"]; return mockData.filter(item => item.toLowerCase().includes(queryString.toLowerCase()) ); }, handleSelect(item) { console.log("选中项:", item); } } }; </script> <style scoped> .search-container .el-input, .search-container .el-autocomplete { width: 300px; } </style> ``` 上述代码展示了两种方式:一种是通过简单的 `el-input` 实现基本的搜索框;另一种则是利用 `el-autocomplete` 提供带有自动补全功能的搜索框--- ### 使用 HTML/CSS/JavaScript 创建自定义搜索框 如果不依赖框架,也可以纯手工打造一个具有简单功能的搜索框。以下是一个完整的例子: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义搜索框</title> <style> /* 定义样式 */ .search-box { position: relative; display: inline-block; } input[type="text"] { padding: 10px; font-size: 16px; border-radius: 5px; border: 1px solid #ccc; outline: none; } button { background-color: #4CAF50; color: white; border: none; padding: 10px 15px; cursor: pointer; margin-left: -5px; /* 调整按钮位置 */ border-top-right-radius: 5px; border-bottom-right-radius: 5px; } button:hover { background-color: #45a049; } </style> </head> <body> <h3>自定义搜索框</h3> <form action="#" onsubmit="return false;"> <div class="search-box"> <input type="text" id="searchInput" placeholder="输入关键词..." /> <button onclick="performSearch()">搜索</button> </div> </form> <script> function performSearch() { const searchQuery = document.getElementById('searchInput').value.trim(); if (searchQuery.length === 0) { alert('请输入有效的查询条件'); return; } console.log(`正在执行搜索操作... 查询词为 "${searchQuery}"`); } </script> </body> </html> ``` 此代码片段展示了一个完全由原生 HTML、CSS 和 JavaScript 构建的搜索框。它包含了输入区域以及触发事件处理程序的部分[^2]。 --- ### 表单布局注意事项 当页面中有多个类似的搜索框或者输入框时,建议使用 `el-form` 来管理这些控件,并为其设定一致的 `label-width` 属性。这有助于提升整体界面的一致性和用户体验。 例如,在 Element UI 中可以这样配置表单: ```vue <el-form label-width="100px"> <el-form-item label="关键字"> <el-input></el-input> </el-form-item> </el-form> ``` 这种做法能够有效解决因宽度不均而导致的视觉混乱问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值