欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue文本模糊匹配功能如何實現(xiàn)

 更新時間:2020年07月30日 15:06:21   作者:viewts  
這篇文章主要介紹了Vue文本模糊匹配功能如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下

模糊匹配功能在下拉菜單的組件中用的非常多,于是打算寫幾個demo看看細節(jié)上是如何實現(xiàn)的。

一、最簡單的模糊匹配:計算屬性

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <input type="text" v-model="message">
    <ul>
      <li v-for="(option, index) in matchedOptions" :key="index">{{ option }}</li>
    </ul>
  </div>
  <script src="./vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        message: '',
        options: ['html', 'css', 'javascript']
      },
      computed: {
        matchedOptions() {
          if (this.message !== '') {
            return this.options.filter(option => option.includes(this.message))
          }
          return this.options
        }
      }
    })
  </script>
</body>
</html>

在上面的例子中,計算屬性matchedOptions會在文本框內(nèi)容message變化時篩選options里的數(shù)據(jù),效果圖如下所示:

二、使用作用域插槽實現(xiàn)

使用插槽主要是為了使該功能組件化:在select組件中插入option,然后option通過作用域插槽從select中獲取文本值:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <my-select>
      <template #default="{ message }">
        <ul>
          <li v-for="(option, index) in options" :key="index" v-show="option.includes(message)">{{ option }}</li>
        </ul>
      </template>
    </my-select>
  </div>
  <script src="./vue.js"></script>
  <script>
    Vue.component('my-select', {
      template: `
        <div class="my-select">
          <input type="text" v-model="message">
          <slot :message="message"></slot>
        </div>
      `,
      data() {
        return {
          message: ''
        }
      }
    })
    new Vue({
      el: '#app',
      data: {
        options: ['html', 'css', 'javascript']
      }
    })
  </script>
</body>
</html>

全局注冊了my-select組件后,可以刪除app里的message數(shù)據(jù),使用v-show來控制選項的顯示,運行效果和計算屬性方式相同。缺點就是無法單文件化(剛學(xué)vue沒多久,不知道怎么在單文件里使用作用域插槽,試過直接把template里的東西封裝成my-option好像并不管用)

三、混入廣播和派發(fā)方法在獨立組件中實現(xiàn)模糊匹配

首先需要一個emitter文件:

/**
 * 子組件廣播事件
 * @param {string} componentName 子組件名
 * @param {string} eventName 事件名
 * @param {...any} params 事件參數(shù)
 */
function _broadcast(componentName, eventName, ...params) {
  this.$children.forEach(child => {
    if (child.$options.name === componentName) {
      child.$emit(eventName, ...params)
    }
    _broadcast.call(child, componentName, eventName, ...params)
  })
}

/**
 * 父組件派發(fā)事件
 * @param {string} componentName 父組件名
 * @param {string} eventName 事件名
 * @param {...any} params 事件參數(shù)
 */
function _dispatch(componentName, eventName, ...params) {
  if (this.$parent) {
    if (this.$parent.$options.name === componentName) {
      this.$parent.$emit(eventName, ...params)
    }
    _dispatch.call(this.$parent, componentName, eventName, ...params)
  }
}

/**
 * mixin
 */
export default {
  methods: {
    broadcast(componentName, eventName, ...params) {
      _broadcast.call(this, componentName, eventName, ...params)
    },
    dispatch(componentName, eventName, ...params) {
      _dispatch.call(this, componentName, eventName, ...params)
    }
  }
}

注意,這里的$children和$parent都是指具有dom父子關(guān)系的vue組件。

最后,通過設(shè)置查詢條件來控制子組件的顯示與隱藏即可實現(xiàn)實時模糊搜索。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue實現(xiàn)進入全屏和退出全屏的示例代碼

    vue實現(xiàn)進入全屏和退出全屏的示例代碼

    最近一個項目需要進行大屏展示,所以登錄完就要處于一個全屏的狀態(tài),本文主要介紹了vue實現(xiàn)進入全屏和退出全屏的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • ESLint 是如何檢查 .vue 文件的

    ESLint 是如何檢查 .vue 文件的

    這篇文章主要介紹了ESLint 是如何檢查 .vue 文件的,幫助大家更好的理解和使用ESLINT,感興趣的朋友可以了解下
    2020-11-11
  • Vue中router-view和component :is的區(qū)別解析

    Vue中router-view和component :is的區(qū)別解析

    這篇文章主要介紹了Vue中router-view和component :is的區(qū)別解析,router-view用法直接填寫跳轉(zhuǎn)路由,路由組件會渲染<router-view></router-view>標簽,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • Vue中使用iframe踩坑問題記錄 iframe+postMessage

    Vue中使用iframe踩坑問題記錄 iframe+postMessage

    這篇文章主要介紹了Vue中使用iframe踩坑問題記錄 iframe+postMessage,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 講解vue-router之什么是嵌套路由

    講解vue-router之什么是嵌套路由

    這篇文章主要介紹了講解vue-router之什么是嵌套路由,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vue中使用hover選擇器無效的問題

    vue中使用hover選擇器無效的問題

    這篇文章主要介紹了vue中使用hover選擇器無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue+iview+less 實現(xiàn)換膚功能

    vue+iview+less 實現(xiàn)換膚功能

    這篇文章主要介紹了vue+iview+less 實現(xiàn)換膚功能,項目搭建用的vue—cli,css框架選擇的iview,具體操作流程大家跟隨腳本之家小編一起看看吧
    2018-08-08
  • vue-cli3 DllPlugin 提取公用庫的方法

    vue-cli3 DllPlugin 提取公用庫的方法

    這篇文章主要介紹了vue-cli3 DllPlugin 提取公用庫 ,需要的朋友可以參考下
    2019-04-04
  • Vue slot插槽作用與原理深入講解

    Vue slot插槽作用與原理深入講解

    插槽slot可以說在一個Vue項目里面處處都有它的身影,比如我們使用一些UI組件庫的時候,我們通??梢允褂貌宀蹃碜远x我們的內(nèi)容,這篇文章主要介紹了Vue3中slot插槽使用方式,需要的朋友可以參考下
    2023-01-01
  • Vue+ElementUI前端添加展開收起搜索框按鈕完整示例

    Vue+ElementUI前端添加展開收起搜索框按鈕完整示例

    最近一直在用element ui做后臺項目,下面這篇文章主要給大家介紹了關(guān)于Vue+ElementUI前端添加展開收起搜索框按鈕的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05

最新評論