前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Element 带输入建议的input框

Element 带输入建议的input框

作者头像
tianyawhl
发布2020-04-26 10:59:11
1.9K0
发布2020-04-26 10:59:11
举报
文章被收录于专栏:前端之攻略

激活即列出输入建议 的情况

官网的例子

代码语言:javascript
复制
  <el-col :span="12">
    <div class="sub-title">激活即列出输入建议</div>
    <el-autocomplete
      class="inline-input"
      v-model="state1"
      :fetch-suggestions="querySearch"
      placeholder="请输入内容"
      @select="handleSelect"
    ></el-autocomplete>
  </el-col>
代码语言:javascript
复制
<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 [
         
        ];
      },
      handleSelect(item) {
        console.log(item);
      }
    },
    mounted() {
      this.restaurants = this.loadAll();
    }
  }
</script>

实际应用:假如把多级菜单取出最里面一级的数据,并在输入框中输入包含菜单任何位置的内容,都能过滤菜单,并不是官网例子只过滤以某些内容开头的菜单。

现在把这个input框做成一个组件

代码语言:javascript
复制
<template>
  <el-autocomplete
    class="search-input"
    v-model="headSearch"
    :fetch-suggestions="querySearch"
    placeholder="请输入内容"
    clearable
    @select="handleSelect"
  >
    <template slot-scope="{ item }">
      <div class="name">{{ item.menuName }}</div>
      <!-- <div class="name">{{ item.value }}</div> -->
    </template>
  </el-autocomplete>
</template>
代码语言:javascript
复制
<script>
export default {
  props: { navMenus: Array },
  data() {
    return {
      headMenus: [],
      headSearch: ""
    };
  },
  created() {   
    let tepArr = [];
    this.sortData(this.navMenus, tepArr);
    //console.log(tepArr);
    this.headMenus = tepArr
  },
  mounted() {
    
  },
  methods: {
    querySearch(queryString, cb) {
      var headMenus = this.headMenus;
      var results = queryString
        ? headMenus.filter(this.createFilter(queryString))
        : headMenus;
      // 调用 callback 返回建议列表的数据
      cb(results);
    },
    createFilter(queryString) {
      return menu => {
        return menu.menuName.toLowerCase().match(queryString.toLowerCase());
      };
    },
    handleSelect(item) {
      console.log(item);
      //this.headSearch = item.menuName;
      this.$router.push(item.path);
      this.$store.commit("saveCurrentMenuName", item.label);
      this.$store.commit("addTab", item);
    },
    sortData(dataArr, tepArr) {
      //debugger
      for (let i = 0; i < dataArr.length; i++) {
        if (!dataArr[i].childMenu || dataArr[i].childMenu.length == 0) {
          let obj = {};
          for (let key in dataArr[i]) {
            obj[key] = dataArr[i][key];
          }
          tepArr.push(obj);
        } else {
          this.sortData(dataArr[i].childMenu, tepArr);
        }
      }
    }
  }
};
</script>
代码语言:javascript
复制
<style scoped>
.search-input {
  width: 200px;
  margin-right: 20px;
}
</style>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档