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

討論vue中混入mixin的應(yīng)用

 更新時間:2021年05月11日 14:52:47   作者:sugar_coffee  
這篇文章主要介紹了vue中混入mixin的理解和應(yīng)用,對vue感興趣的同學(xué),可以參考下

混入 (mixin) 提供了一種非常靈活的方式,來分發(fā) Vue 組件中的可復(fù)用功能。一個混入對象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對象時,所有混入對象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)。

即 mixin 在引入組件之后,會將組件內(nèi)部的內(nèi)容如data、method等屬性與父組件相應(yīng)內(nèi)容進(jìn)行合并。相當(dāng)于在引入后,父組件的各種屬性方法都被擴(kuò)充了。

比如在兩個不同的組件的組件中調(diào)用sayHi方法,需要重復(fù)定義,倘若方法比較復(fù)雜,代碼將更加冗余,但使用mixins 就相對比較簡單了。

首先在 mixin.js 文件中定義一個混入對象:

let mixin = {
  data () {
    return {
      userName: 'mixin'
    }
  },
  created () {
    this.sayHello()
  },
  methods: {
    sayHello () {
      console.log(`${this.userName}, welcome`)
    }
  }
}

export default mixin

然后定義兩個組件,分別在組件中引入:

<script>
    import mixin from '../mixin'

    export default {
      mixins: [mixin]
    }
</script>

則兩個組件的打印結(jié)果都為:

如果在兩個組件 data 中定義了各自的 userName,則打印結(jié)果會引用各自組件中的 userName

如果在兩個組件的 methods 中重復(fù)定義了相同的方法,則 mixin 中的方法會被覆蓋

給其中一個組件定義自己的 userName 和 sayHi 方法:

<script>
    import mixin from '../mixin'

    export default {
      mixins: [mixin],
      data() {
        return {
          userName: 'BComponent'
        }
      },
      created () {
          this.sayHello()
      },
      methods: {
        sayHello () {
          console.log(`Hi, ${this.userName}`)
        }
      }
    }
</script>

則打印結(jié)果:

這有點(diǎn)像注冊了一個 vue 公共方法,可以在多個組件中使用。還有一點(diǎn)類似于在原型對象中注冊方法,并且可以定義相同函數(shù)名的方法進(jìn)行覆蓋。

混入也可以進(jìn)行全局注冊,但一般情況下不會全局使用,因?yàn)闀廴?vue 實(shí)例。

我一般在項(xiàng)目中會這樣用,比如在多個組件中有用到通用選擇器,選項(xiàng)是:是,否,可以使用 mixin 來添加一個統(tǒng)一的字典項(xiàng)過濾器,來實(shí)現(xiàn)選項(xiàng)的回顯。

1. 首先創(chuàng)建一個 Dictionary.js 文件,用于保存字典項(xiàng)對應(yīng)的含義,并將其暴露出去:

export const COMMON_SELECT = [
    { code: 0, label: '是'},
    { code: 1, label: '否'}
];

注:此處創(chuàng)建的 Dictionary.js 文件,也可以在頁面渲染的時候拿來循環(huán)選項(xiàng),具體代碼如下:

import { COMMON_SELECT } from '../constants/Dictionary.js'

export default {
    data() {
        return {
            comSelectOptions: COMMON_SELECT
        }
    }
}

<select v-mode="selStatus">
    <el-option v-for="item in comSelectOptions" :key="item.code" :label="item.label" :value="item.code"></el-option>
</select>

2.然后再創(chuàng)建一個 filter.js 文件,保存自定義的過濾函數(shù):

import { COMMON_SELECT } from '../constants/Dictionary.js'

export default {
  filters: {
    comSelectFilter: (value) => {
      const target = COMMON_SELECT.filter(item => {
        return item.code === value
      })
      return target.length ? target[0].label : value
    }
  }
}

3.最后在 main.js 中一次性引入 filter 方法:

import filter from './mixin/filter'
Vue.mixin(filter)

歐了,這樣我們就可以在任一組件中隨意使用了

<template>
    <div>
        ....
        {{ status | comSelectFilter }}
        ....
    </div>  
</template>

以上就是討論vue中混入mixin的應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于vue中混入mixin的應(yīng)用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

五指山市| 尚志市| 雷山县| 沂南县| 科技| 宝丰县| 会泽县| 承德市| 灵武市| 柘城县| 麻城市| 肇州县| 类乌齐县| 古丈县| 华宁县| 滨海县| 班戈县| 隆林| 台中县| 富蕴县| 开远市| 绩溪县| 襄汾县| 华安县| 永宁县| 分宜县| 武强县| 蒙城县| 伊通| 边坝县| 新竹县| 文登市| 新和县| 镶黄旗| 阿拉善左旗| 鄂托克前旗| 绍兴市| 长乐市| 江阴市| 安达市| 勃利县|