最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、最簡單的模糊匹配:計(jì)算屬性

<!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>

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

二、使用作用域插槽實(shí)現(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來控制選項(xiàng)的顯示,運(yùn)行效果和計(jì)算屬性方式相同。缺點(diǎn)就是無法單文件化(剛學(xué)vue沒多久,不知道怎么在單文件里使用作用域插槽,試過直接把template里的東西封裝成my-option好像并不管用)

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

首先需要一個(gè)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è)置查詢條件來控制子組件的顯示與隱藏即可實(shí)現(xiàn)實(shí)時(shí)模糊搜索。

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

相關(guān)文章

  • vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例

    vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例

    下面小編就為大家分享一篇vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue中使用極驗(yàn)驗(yàn)證碼的方法(附demo)

    vue中使用極驗(yàn)驗(yàn)證碼的方法(附demo)

    這篇文章主要介紹了vue中使用極驗(yàn)驗(yàn)證碼的方法(附demo)本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Vue父組件調(diào)用子組件函數(shù)實(shí)現(xiàn)

    Vue父組件調(diào)用子組件函數(shù)實(shí)現(xiàn)

    這篇文章主要介紹了Vue父組件調(diào)用子組件函數(shù)實(shí)現(xiàn),全文通過舉例子及代碼的形式進(jìn)行了一個(gè)簡單的介紹,希望大家能夠理解并且學(xué)習(xí)到其中知識
    2021-08-08
  • vue.js中過濾器的使用教程

    vue.js中過濾器的使用教程

    過濾器是一個(gè)通過輸入數(shù)據(jù),能夠及時(shí)對數(shù)據(jù)進(jìn)行處理并返回一個(gè)數(shù)據(jù)結(jié)果的簡單函數(shù)。下面這篇文章主要給大家介紹了關(guān)于vue.js中過濾器使用的相關(guān)資料,需要的朋友可以參考借鑒,下面來看看詳細(xì)的介紹。
    2017-06-06
  • weex里Vuex state使用storage持久化詳解

    weex里Vuex state使用storage持久化詳解

    本篇文章主要介紹了weex里Vuex state使用storage持久化詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • vue圓形進(jìn)度條環(huán)形進(jìn)度條組件內(nèi)部顯示圖片示例

    vue圓形進(jìn)度條環(huán)形進(jìn)度條組件內(nèi)部顯示圖片示例

    這篇文章主要為大家介紹了vue圓形進(jìn)度條環(huán)形進(jìn)度條組件內(nèi)部顯示圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 詳細(xì)聊聊Vue生命周期的那些事

    詳細(xì)聊聊Vue生命周期的那些事

    這篇文章主要給大家介紹了關(guān)于Vue生命周期的那些事,在使用vue開發(fā)過程中經(jīng)常會(huì)接觸到生命周期的問題,但對于每個(gè)鉤子函數(shù)都做了什么,應(yīng)用場景比較模糊,希望通過這次梳理讓自己清楚一些,需要的朋友可以參考下
    2021-09-09
  • 詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別

    詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別

    這篇文章主要介紹了詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 淺談vue實(shí)現(xiàn)雙向事件綁定v-model的原理

    淺談vue實(shí)現(xiàn)雙向事件綁定v-model的原理

    vue使用v-model實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,它會(huì)根據(jù)控件類型自動(dòng)選取正確的方法來更新元素,本文就詳細(xì)的介紹一下原理,感興趣的可以了解一下
    2021-08-08
  • 使用vue ant design分頁以及表格分頁改為中文問題

    使用vue ant design分頁以及表格分頁改為中文問題

    這篇文章主要介紹了使用vue ant design分頁以及表格分頁改為中文問題,具有很好的參考價(jià)值,希望對大家有所幫助。
    2023-04-04

最新評論

乃东县| 望江县| 衢州市| 新闻| 永川市| 永靖县| 香河县| 哈尔滨市| 涪陵区| 灵山县| 八宿县| 泸溪县| 远安县| 安岳县| 当阳市| 凤台县| 淄博市| 滦南县| 尖扎县| 来宾市| 黎平县| 宜川县| 文昌市| 高密市| 延吉市| 繁峙县| 都江堰市| 平顶山市| 墨脱县| 绥芬河市| 阿瓦提县| 揭东县| 敖汉旗| 北碚区| 凌源市| 昭通市| 常山县| 綦江县| 靖边县| 南皮县| 石城县|