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

淺析Vue中混入mixin的實(shí)現(xiàn)

 更新時(shí)間:2024年11月07日 15:17:14   作者:刻刻帝的海角  
混入 (mixin) 提供了一種非常靈活的方式,來(lái)分發(fā) Vue 組件中的可復(fù)用功能,下面就跟隨小編一起來(lái)了解一下Vue中混入mixin的實(shí)現(xiàn)吧

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

// 定義一個(gè)混入對(duì)象
var myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}
 
// 定義一個(gè)使用混入對(duì)象的組件
var Component = Vue.extend({
  mixins: [myMixin]
})
 
var component = new Component() // => "hello from mixin!"

選項(xiàng)合并

當(dāng)組件和混入對(duì)象含有同名選項(xiàng)時(shí),這些選項(xiàng)將以恰當(dāng)?shù)姆绞竭M(jìn)行“合并”。

比如,數(shù)據(jù)對(duì)象在內(nèi)部會(huì)進(jìn)行遞歸合并,并在發(fā)生沖突時(shí)以組件數(shù)據(jù)優(yōu)先。

var mixin = {
  data: function () {
    return {
      message: 'hello',
      foo: 'abc'
    }
  }
}
 
new Vue({
  mixins: [mixin],
  data: function () {
    return {
      message: 'goodbye',
      bar: 'def'
    }
  },
  created: function () {
    console.log(this.$data)
    // => { message: "goodbye", foo: "abc", bar: "def" }
  }
})

同名鉤子函數(shù)將合并為一個(gè)數(shù)組,因此都將被調(diào)用。另外,混入對(duì)象的鉤子將在組件自身鉤子之前調(diào)用。

var mixin = {
  created: function () {
    console.log('混入對(duì)象的鉤子被調(diào)用')
  }
}
 
new Vue({
  mixins: [mixin],
  created: function () {
    console.log('組件鉤子被調(diào)用')
  }
})
 
// => "混入對(duì)象的鉤子被調(diào)用"
// => "組件鉤子被調(diào)用"

值為對(duì)象的選項(xiàng),例如 methods、components 和 directives,將被合并為同一個(gè)對(duì)象。兩個(gè)對(duì)象鍵名沖突時(shí),取組件對(duì)象的鍵值對(duì)。

var mixin = {
  methods: {
    foo: function () {
      console.log('foo')
    },
    conflicting: function () {
      console.log('from mixin')
    }
  }
}
 
var vm = new Vue({
  mixins: [mixin],
  methods: {
    bar: function () {
      console.log('bar')
    },
    conflicting: function () {
      console.log('from self')
    }
  }
})
 
vm.foo() // => "foo"
vm.bar() // => "bar"
vm.conflicting() // => "from self"

注意:Vue.extend() 也使用同樣的策略進(jìn)行合并。

全局混入

混入也可以進(jìn)行全局注冊(cè)。使用時(shí)格外小心!一旦使用全局混入,它將影響每一個(gè)之后創(chuàng)建的 Vue 實(shí)例。使用恰當(dāng)時(shí),這可以用來(lái)為自定義選項(xiàng)注入處理邏輯。

// 為自定義的選項(xiàng) 'myOption' 注入一個(gè)處理器。
Vue.mixin({
  created: function () {
    var myOption = this.$options.myOption
    if (myOption) {
      console.log(myOption)
    }
  }
})
 
new Vue({
  myOption: 'hello!'
})
// => "hello!"

請(qǐng)謹(jǐn)慎使用全局混入,因?yàn)樗鼤?huì)影響每個(gè)單獨(dú)創(chuàng)建的 Vue 實(shí)例 (包括第三方組件)。大多數(shù)情況下,只應(yīng)當(dāng)應(yīng)用于自定義選項(xiàng),就像上面示例一樣。推薦將其作為插件發(fā)布,以避免重復(fù)應(yīng)用混入。

自定義選項(xiàng)合并策略

自定義選項(xiàng)將使用默認(rèn)策略,即簡(jiǎn)單地覆蓋已有值。如果想讓自定義選項(xiàng)以自定義邏輯合并,可以向 Vue.config.optionMergeStrategies 添加一個(gè)函數(shù):

Vue.config.optionMergeStrategies.myOption = function (toVal, fromVal) {
  // 返回合并后的值
}

對(duì)于多數(shù)值為對(duì)象的選項(xiàng),可以使用與 methods 相同的合并策略:

var strategies = Vue.config.optionMergeStrategies
strategies.myOption = strategies.methods

可以在 Vuex 1.x 的混入策略里找到一個(gè)更高級(jí)的例子:

const merge = Vue.config.optionMergeStrategies.computed
Vue.config.optionMergeStrategies.vuex = function (toVal, fromVal) {
  if (!toVal) return fromVal
  if (!fromVal) return toVal
  return {
    getters: merge(toVal.getters, fromVal.getters),
    state: merge(toVal.state, fromVal.state),
    actions: merge(toVal.actions, fromVal.actions)
  }
}

到此這篇關(guān)于淺析Vue中混入mixin的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vue混入mixin內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在JS中如何同步修改vue中的變量

    在JS中如何同步修改vue中的變量

    這篇文章主要介紹了在JS中如何同步修改vue中的變量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于Vue虛擬dom問題

    關(guān)于Vue虛擬dom問題

    這篇文章主要介紹了Python合成Excel表的實(shí)現(xiàn)代碼(多sheet),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Vue圖片裁剪組件實(shí)例代碼

    Vue圖片裁剪組件實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Vue圖片裁剪組件的相關(guān)資料,本文介紹的組件是基于vue-cropper二次封裝,vue-cropper大家應(yīng)該都很熟悉了吧,需要的朋友可以參考下
    2021-07-07
  • Javascript對(duì)象及Proxy工作原理詳解

    Javascript對(duì)象及Proxy工作原理詳解

    這篇文章主要為大家介紹了Javascript對(duì)象及Proxy工作原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • VueJs 搭建Axios接口請(qǐng)求工具

    VueJs 搭建Axios接口請(qǐng)求工具

    axios 是一個(gè)基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端。今天我們來(lái)介紹VueJs 搭建Axios接口請(qǐng)求工具,需要的朋友參考下本文吧
    2017-11-11
  • vue+Element-ui實(shí)現(xiàn)分頁(yè)效果實(shí)例代碼詳解

    vue+Element-ui實(shí)現(xiàn)分頁(yè)效果實(shí)例代碼詳解

    這篇文章主要介紹了vue+Element-ui實(shí)現(xiàn)分頁(yè)效果 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • vue.js中修飾符.stop的用法解析

    vue.js中修飾符.stop的用法解析

    這篇文章主要介紹了vue.js中修飾符.stop的用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue路由篇之router-view內(nèi)容無(wú)法渲染出來(lái)問題

    vue路由篇之router-view內(nèi)容無(wú)法渲染出來(lái)問題

    這篇文章主要介紹了vue路由篇之router-view內(nèi)容無(wú)法渲染出來(lái)問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • mpvue 單文件頁(yè)面配置詳解

    mpvue 單文件頁(yè)面配置詳解

    這篇文章主要介紹了mpvue 單文件頁(yè)面配置詳解,本文將介紹如何在 mpvue 官方模板的基礎(chǔ)上,通過配置 mpvue-config-loader 來(lái)實(shí)現(xiàn)在 vue 文件內(nèi)書寫小程序的頁(yè)面配置,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Vue使用echarts繪制柱狀圖和折線圖

    Vue使用echarts繪制柱狀圖和折線圖

    這篇文章主要為大家學(xué)習(xí)介紹了Vue如何使用echarts繪制柱狀圖和折線圖,文中有詳細(xì)的示例代碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評(píng)論

泽库县| 廊坊市| 成安县| 安国市| 宜君县| 察雅县| 手机| 邻水| 福清市| 光泽县| 聊城市| 盱眙县| 汝南县| 鹤庆县| 原平市| 鄂伦春自治旗| 济阳县| 红桥区| 通城县| 唐海县| 神木县| 金沙县| 上林县| 龙南县| 兴和县| 德惠市| 太仆寺旗| 中宁县| 顺昌县| 松潘县| 临夏市| 潞城市| 岳西县| 富川| 南涧| 勐海县| 淳安县| 周口市| 射洪县| 益阳市| 乐山市|