vue+element input的建议搜索实时高亮关键字

1,163 阅读1分钟

element中有个input的搜索搜索功能,但是不能实时高亮关键字,做了下修改。

image.png

实现代码:

  <div class="dm_con">
      <div class="zu">
        <h4>带输入建议输入框</h4>
        <el-autocomplete
          class="inline-input"
          v-model="state1"
          :fetch-suggestions="querySearch"
          placeholder="请输入内容"
          @select="handleSelect"
        >
          <template slot-scope="{item}">
            <div v-html="item.value"></div>
          </template>
        </el-autocomplete>
      </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      state1: '',
      restaurants:[
          { "selectLable": "三全鲜食(北新泾店)", "address": "长宁区新渔路144号" },
          { "selectLable": "Hot honey 首尔炸鸡(仙霞路)", "address": "上海市长宁区淞虹路661号" },
          { "selectLable": "新旺角茶餐厅", "address": "上海市普陀区真北路988号创邑金沙谷6号楼113" },
          { "selectLable": "泷千家(天山西路店)", "address": "天山西路438号" },
          { "selectLable": "胖仙女纸杯蛋糕(上海凌空店)", "address": "上海市长宁区金钟路968号1幢18号楼一层商铺18-101" },
          { "selectLable": "贡茶", "address": "上海市长宁区金钟路633号" },
          { "selectLable": "豪大大香鸡排超级奶爸", "address": "上海市嘉定区曹安公路曹安路1685号" },
          { "selectLable": "茶芝兰(奶茶,手抓饼)", "address": "上海市普陀区同普路1435号" },
          { "selectLable": "十二泷町", "address": "上海市北翟路1444弄81号B幢-107" },
          { "selectLable": "星移浓缩咖啡", "address": "上海市嘉定区新郁路817号" },
          { "selectLable": "阿姨奶茶/豪大大", "address": "嘉定区曹安路1611号" },
          { "selectLable": "新麦甜四季甜品炸鸡", "address": "嘉定区曹安公路2383弄55号" },
          { "selectLable": "Monica摩托主题咖啡店", "address": "嘉定区江桥镇曹安公路2409号1F,2383弄62号1F" },
          { "selectLable": "浮生若茶(凌空soho店)", "address": "上海长宁区金钟路968号9号楼地下一层" },
          { "selectLable": "NONO JUICE  鲜榨果汁", "address": "上海市长宁区天山西路119号" },
          { "selectLable": "CoCo都可(北新泾店)", "address": "上海市长宁区仙霞西路" },
          { "selectLable": "快乐柠檬(神州智慧店)", "address": "上海市长宁区天山西路567号1层R117号店铺" },
          { "selectLable": "Merci Paul cafe", "address": "上海市普陀区光复西路丹巴路28弄6号楼819" },
          { "selectLable": "猫山王(西郊百联店)", "address": "上海市长宁区仙霞西路88号第一层G05-F01-1-306" },
          { "selectLable": "枪会山", "address": "上海市普陀区棕榈路" },
          { "selectLable": "纵食", "address": "元丰天山花园(东门) 双流路267号" },
          { "selectLable": "钱记", "address": "上海市长宁区天山西路" },
          { "selectLable": "壹杯加", "address": "上海市长宁区通协路" },
          { "selectLable": "唦哇嘀咖", "address": "上海市长宁区新泾镇金钟路999号2幢(B幢)第01层第1-02A单元" },
          { "selectLable": "爱茜茜里(西郊百联)", "address": "长宁区仙霞西路88号1305室" },
          { "selectLable": "爱茜茜里(近铁广场)", "address": "上海市普陀区真北路818号近铁城市广场北区地下二楼N-B2-O2-C商铺" }
        ]
    }
  },

  methods: {
    querySearch(queryString, cb) {
        var restaurants = this.restaurants;
        var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
        // 调用 callback 返回建议列表的数据
        let htmlStr=`<span style='color:red;'>${queryString}</span>`
        results.forEach((item)=>{
          item.value = item.selectLable.replace(queryString,htmlStr)
        })
        cb(results);
      },
      createFilter(queryString) {
        return (restaurant) => {
          return (restaurant.selectLable.toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
        };
      },
      handleSelect(item) {
        this.state1 = item.selectLable;
      }
      
    },
};
</script>