zoukankan      html  css  js  c++  java
  • element-ui 的input模糊搜索 【动态渲染多个 互不干扰】

    最近项目中频繁使用element-ui的input模糊搜索, 因为是多条件的模糊搜索,按照官方文档,转化了数据类型传入进去,但是还是偶尔时不时的报 “toLowerCase of undefined”。今天彻底将其弄好,需要对传入的值进行判断。然后发现又发现数据无法刷新,采用watch去监听。

    全部代码如下:

    <template>
      <el-autocomplete
        class="inline-input"
        v-model="state"
        :fetch-suggestions="querySearch"
        placeholder="请输入内容"
        @select="handleSelect"
        style=" 300px"
        @clear="clearInput"
        clearable
      ></el-autocomplete>
    </template>
    
    <script>
      export default {
        name: "inputSearch",
        props: {
          restaurants: {
            default: []
          },
          value: {
            default: ""
          },
        },
        data() {
          return {
            inputaData: [],
            state: "",
          }
        },
        methods: {
          querySearch(queryString, cb) {
            var restaurants = this.inputaData;
            // console.log(restaurants,'restaurants');
            var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
            // 调用 callback 返回建议列表的数据
            cb(results);
          },
          createFilter(queryString) {
            return (restaurant) =>{
              if (restaurant.pinyin){
                if(restaurant.pinyin.toLowerCase().indexOf(queryString.toLowerCase()) > -1){
                  return true;
                }
              }
              if (restaurant.wubi) {
                if(restaurant.wubi.toLowerCase().indexOf(queryString.toLowerCase()) > -1){
                  return true;
                }
              }
              if (restaurant.value) {
                if(restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) > -1){
                  return true;
                }
              }
              return false;
            };
          },
          handleSelect(item) {
            this.$emit("handleSelect",item)
          },
          clearInput(){
            this.$emit("clearInput")
          }
        },
        mounted() {
          setTimeout(() => {
            this.inputaData = this._props.restaurants;
            // console.log(this.inputaData,3333333333);
          }, 2000),
            setTimeout(() => {
              this.state = this._props.value;
            }, 2000)
    
        },
        watch: {
          restaurants: {
            handler(newValue, oldValue) {
              this.inputaData=newValue;
            },
            deep: true
          }
        }
      }
    </script>

     如果不是抽取组件状态下, 多个模糊搜索,

    createFilter和cb 需要区分。不然无法进行匹配搜索
  • 相关阅读:
    Linux学习笔记(第一章)
    C#中的抽象类有什么好处?究竟它是用来干事什么的呢?
    C#中的 增 、删、 改、 查功能
    在Visual C#中用ListView显示数据记录
    10.14JDBC之数据库连接池之C3P0
    10.19JDBC之使用C3P0连接池重新实现JDBCUtils方法
    10.12JDBC之DAO实现类的优化
    10.13JDBC之数据库连接池
    RhinoMock入门(3)——4种Mock类型
    wse说谈(3)——策略,用户令牌
  • 原文地址:https://www.cnblogs.com/0520euv/p/12452097.html
Copyright © 2011-2022 走看看