一步操作,轻松实现 element 下拉框搜索与输入功能

前言

下拉框对于开发来说再常见不过了,也是界面设计中的常用组件,在部分使用场景下,我们需要做到下拉框可以选择的同时,支持搜素和输入,以 element 的下拉框组件为例,当我们同时设置属性让其支持搜素和输入时,就会出现下图问题:

在这里插入图片描述

通过上面的动图我们不难看出,下拉框输入已经存在的值进行匹配是没有问题的,点击提交控制台也将值打印了出来,但当我们输入一个不存在的值时,再次点击提交,控制台并没有打印出来,这是因为什么呢?

分析原因

其主要的原因就是使用 vue 开发时,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值。


解决方案

this.$forceUpdate()

this.Sforceupdate()vue 中的一个 api,它可以强制组件更新,就是当组件的数据发生变化时,它可以立即更新组件的视图,而不需要等待下一次重新渲染。

this.$forceupdate() 函数有以下特点:

  • 它可以强制组件更新,在数据发生变化时,立即更新组件的视图,而不需要等待下一次重新渲染;
  • 它可以避免组件重新渲染,提升性能;
  • 它可以避免在某些情况下出现不可预料的 bug
  • 它可以使组件在不同的环境中保持一致性。

此外,this.$forceupdate() 函数也可以接受一个参数,参数为 boolean 类型,传入 true 则可以强制执行子组件的更新,传入 false 时,则只更新当前组件本身。


调整后

在这里插入图片描述

完整代码

<template>
  <div class="parentBox">
    <el-select v-model="foodModel" placeholder="请选择" clearable filterable @blur="selectBlur" @clear="selectClear">
      <el-option v-for="item in options" :key="item.index" :label="item.label" :value="item.value"></el-option>
    </el-select>
    <el-button type="primary" @click="submitOn">提交</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        {
          value: "0",
          label: "黄金糕",
        },
        {
          value: "1",
          label: "双皮奶",
        },
        {
          value: "2",
          label: "蚵仔煎",
        },
        {
          value: "3",
          label: "龙须面",
        },
        {
          value: "4",
          label: "北京烤鸭",
        },
      ],
      foodModel: "",
    };
  },
  methods: {
    selectBlur(e) {
      this.foodModel = e.target.value;
      this.$forceUpdate(); // 强制更新
    },
    selectClear() {
      this.foodModel = "";
      this.$forceUpdate(); // 强制更新
    },
    // 模拟提交
    submitOn() {
      console.log(this.foodModel);
    },
  },
};
</script>

拓展

解决 input 标签设置 type="number" 后,maxlength 失效的问题。

添加 oninput 事件,用 js 进行判断,如果长度大于设置位数,则截取。

<el-input oninput="if(value.length > 6) value = value.slice(0,6)" v-model="value" type="number"></el-input>

在这里插入图片描述

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现element下拉框搜索功能,可以使用element-ui中的el-select组件,并在其中使用el-option组件作为下拉选项。 1. 首先,将el-select组件放置在需要的位置上,并给它一个v-model属性,表示当前选中的值。同时,添加一个filterable属性,表示启用搜索功能。 ``` <el-select v-model="selectedValue" filterable> ... </el-select> ``` 2. 在el-select组件内部,使用el-option组件作为下拉选项。对于需要搜索的选项,可以在el-option组件上添加一个label属性。 ``` <el-select v-model="selectedValue" filterable> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> ``` 3. 在Vue实例中,定义一个options数组,包含所有可选的选项。在需要搜索时,可以通过computed属性进行过滤。 ``` computed: { filteredOptions() { return this.options.filter(option => option.label.toLowerCase().indexOf(this.searchText.toLowerCase()) >= 0); } } ``` 4. 在el-select组件中,使用v-for指令遍历filteredOptions数组,然后将label和value分别作为el-option组件的属性。 ``` <el-select v-model="selectedValue" filterable> <el-option v-for="item in filteredOptions" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> ``` 5. 最后,在Vue实例中,定义一个searchText变量,表示当前搜索的文本。可以在el-select组件上添加一个@query-change事件,当搜索文本发生变化时,将searchText变量更新为最新的搜索文本。 ``` <el-select v-model="selectedValue" filterable @query-change="searchText=$event"> ... </el-select> ``` 这样,就可以实现element下拉框搜索功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水星记_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值