elementui组件el-autocomplete 联想搜索

autocomplete 是一个可带输入建议的输入框组件,fetch-suggestions 是一个返回输入建议的方法属性,如 querySearch(queryString, cb),在该方法中你可以在你的输入建议数据准备好时通过 cb(data) 返回到 autocomplete 组件中。

使用之前建议参考官方文档
input根据输入内容提供对应的输入建议https://element.eleme.cn/#/zh-CN/component/input

输入建议回调的数据结构

//官网使用列子
<el-autocomplete
 class="inline-input"
  v-model="state1"
  :fetch-suggestions="querySearch"
  placeholder="请输入内容"
  @select="handleSelect"
></el-autocomplete>
<script>
  export default {
    data() {
      return {
        restaurants: [],
        state1: '',
      };
    },
    methods: {
      querySearch(queryString, cb) {
        var restaurants = this.restaurants;
        var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
        // 调用 callback 返回建议列表的数据
        cb(results);
      },
      createFilter(queryString) {
        return (restaurant) => {
          return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
        };
      },
      loadAll() {
        return [
        //
          { "value": "三全鲜食(北新泾店)", "address": "长宁区新渔路144号" },
          { "value": "Hot honey 首尔炸鸡(仙霞路)", "address": "上海市长宁区淞虹路661号" },
          { "value": "新旺角茶餐厅", "address": "上海市普陀区真北路988号创邑金沙谷6号楼113" }
        ];
      },
      handleSelect(item) {
        console.log(item);
      }
    },
    mounted() {
      this.restaurants = this.loadAll();
    }
  }
</script>
  • 问题:获取到后端返回的数组,并将数组传入作为 results 传入 callback 后,焦点放在 输入框 上的时候,并未出现任何内容,只出现了一个不完整的空白框。
  • 原因:默认绑定data:[] 中的 value 字段。
  • 解决办法:(看了好多方法,其实这里不需要很麻烦的转换数据结构)官网提供了属性value-key,赋值成你需要的字段即可。
    在这里插入图片描述
//我这里需要的字段名称为companyName
<el-autocomplete
   class="inline-input"
   v-model="searchForm.searchCompany"
   :fetch-suggestions="querySearch"
   placeholder="请输入企业关键字"
   @select="handleSelect"
   value-key="companyName"
   @keydown.native.enter="companyPolicyHandel"
 ></el-autocomplete>

增加回车触发事件

  • 问题:@keydown.enter事件触发不了
  • 原因:element-ui自身封装了一层input标签之后,把原来的事件隐藏了,加上.native可以监听到组件根元素的原生事件
  • 解决方法:使用@keydown.native.enter

规则校验不生效

在这里插入图片描述

一开始触发条件使用了blur,改成change就好了,具体原因正在考察中。

searchRule: {
 searchCompany: [
     {required: true, message: '企业不能为空', trigger: 'change'}
   ],
 },

表单只有一个input,回车事件时需要禁止默认提交表单

在这里插入图片描述

  • 问题:表单只有一个input,回车默认提交表单。导致第一次回车就会刷新页面,再次回车,才出发回车事件。
  • 解决:当一个 form 元素中只有一个输入框时,在该输入框中按下回车会提交该表单。如果希望阻止这一默认行为,可以在标签上添加 @submit.native.prevent。或者为表单元素增加属性 onSubmit="return false"。

其他问题遇到继续补充。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-autocompleteElement UI库中的一个组件,用于实现自动完成的功能。使用el-autocomplete组件可以在用户输入时,根据输入内容自动匹配并展示相关选项。 使用el-autocomplete组件的步骤如下: 1. 引入Element UI库和el-autocomplete组件: ```html <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/element-ui/lib/index.js"></script> ``` 2. 在Vue实例中注册el-autocomplete组件: ```javascript Vue.use(ElementUI); ``` 3. 在Vue模板中使用el-autocomplete组件: ```html <el-autocomplete v-model="value" :fetch-suggestions="querySearch" placeholder="请输入关键词" @select="handleSelect"> </el-autocomplete> ``` 4. 在Vue实例中定义相关方法: ```javascript new Vue({ data() { return { value: '', suggestions: ['apple', 'banana', 'orange'] }; }, methods: { querySearch(queryString, cb) { // 根据输入内容进行匹配,返回匹配的选项 const results = queryString ? this.suggestions.filter(item => item.toLowerCase().includes(queryString.toLowerCase())) : this.suggestions; // 调用回调函数,将匹配的选项传递给el-autocomplete组件 cb(results); }, handleSelect(item) { // 处理选中某个选项的逻辑 console.log(item); } } }).$mount('#app'); ``` 以上就是使用el-autocomplete组件的基本步骤。需要注意的是,fetch-suggestions属性用于指定一个方法,该方法在用户输入时被调用,用于获取匹配的选项。@select事件用于监听用户选中某个选项的事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值