下拉搜索el-autocomplete

template

<el-form-item label="型号" prop="modelId" v-show="false">
    <el-input
      v-model="queryParams.modelId"
      placeholder="请输入型号"
      clearable
      @keyup.enter="handleQuery"
    />
  </el-form-item>
  <el-form-item label="型号" prop="modelName"> 
    <el-autocomplete
        v-model="queryParams.modelName" 
        :fetch-suggestions="querySearchAsync"
        placeholder="请输入内容"
        @select="handleSelectQuery"
        @keyup.enter="handleQuery"
        clearable
        value-key="value"
      ></el-autocomplete>
  </el-form-item>

js

/**在表格中显示时,根据id找到对应的name */
function handleModel(id){
  console.log(models.value);
  const name = models.value.filter(name => name.id == id);
  return name.length != 0 ? name[0].value : "";
}
/**搜索下拉列表数据 */
function getModelList() {
  listEquipmentModel().then((response) => {
    //  数据重组
    models.value = response.rows.map((item) => {
      return {
        value: item.modelName,
        id: item.modelId,
      };
    });
  });
}
function querySearchAsync(queryString, cb) {
  console.log(queryString, cb);
  var models1 = models.value;
  if (queryString == "null") {
    queryString = "";
  }
  var results = queryString
    ? models1.filter(createStateFilter(queryString))
    : models1;
  clearTimeout(timeout.value);
  timeout.value = setTimeout(() => {
    cb(results);
  }, 500 * Math.random());
}
/**输入转换为小写 */
function createStateFilter(queryString) {
  return (state) => {
    return state.value.toLowerCase().includes(queryString.toLowerCase());
  };
}
/**搜索选择 */
function handleSelectModel(item) {
  form.value.modelId = item.id;
}
/**表单选择 */
function handleSelectQuery(item) {
  queryParams.value.modelId = item.id;
}
getList();
getModelList();

您可以使用 `el-table` 组件来展示 `el-autocomplete` 的下拉选项。具体做法如下: 1. 在 `el-autocomplete` 的 `popper-class` 属性中指定一个自定义的类名,例如 `autocomplete-table`: ```html <el-autocomplete popper-class="autocomplete-table"></el-autocomplete> ``` 2. 在 `autocomplete-table` 类名下定义一个 `el-table` 组件,并将 `el-autocomplete` 的下拉选项作为 `el-table` 的数据源: ```html <style> .autocomplete-table { width: 300px; } </style> <template> <el-autocomplete popper-class="autocomplete-table" :fetch-suggestions="querySearch"> <template slot-scope="{ item }"> <el-table :data="item.options"> <el-table-column prop="value" label="选项"></el-table-column> </el-table> </template> </el-autocomplete> </template> <script> export default { data() { return { options: [ { value: 'Option 1', options: [{ value: 'Option 1-1' }, { value: 'Option 1-2' }] }, { value: 'Option 2', options: [{ value: 'Option 2-1' }, { value: 'Option 2-2' }] }, { value: 'Option 3', options: [{ value: 'Option 3-1' }, { value: 'Option 3-2' }] } ] } }, methods: { querySearch(queryString, cb) { const results = this.options.filter(option => { return option.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1 }) cb(results) } } } </script> ``` 在上面的例子中,我们定义了一个 `options` 数组,数组中的每一个元素都是一个选项对象,包含一个 `value` 属性和一个 `options` 属性,`value` 属性表示选项的名称,`options` 属性是一个数组,表示该选项的下拉选项。在 `querySearch` 方法中,我们根据用户输入的 `queryString` 筛选出符合条件的选项,并将其作为 `el-autocomplete` 的下拉选项。在 `el-autocomplete` 中,我们使用 `slot-scope` 来获取每个选项的数据对象,然后使用 `el-table` 将该选项的下拉选项渲染为表格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值