国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

詳解Vue的mixin策略

瀏覽:68日期:2022-10-25 09:42:54

我之前一直以為mixin的合并是以組件內的優先,即mixin的內容如果和組件內有沖突的,以組件內為準,確實存在這種情況,但是vue指定的策略更詳細,下面分別記錄各種情況對應的合并策略

基本

當一個組件使用mixin的時候,所有mixin的選項會被混入到組件自己的選項中, 這部分沒什么好說的,直接看代碼

// define a mixin objectconst myMixin = { created() { this.hello() }, methods: { hello() { console.log(’hello from mixin!’) } }}// define an app that uses this mixinconst app = Vue.createApp({ mixins: [myMixin]})app.mount(’#mixins-basic’) // => 'hello from mixin!'

選項的合并策略

這里的選項指的就是 data methods和生命周期鉤子函數這些選項,他們的會采取不同的合并策略

像data,methods,components,directives這樣的會被合并進同一個對象中,并且遇到沖突項以組件的為準

const myMixin = { data() { return { message: ’hello’, foo: ’abc’ } }}const app = Vue.createApp({ mixins: [myMixin], data() { return { message: ’goodbye’, bar: ’def’ } }, created() { console.log(this.$data) // => { message: 'goodbye', foo: 'abc', bar: 'def' } }})

const myMixin = { methods: { foo() { console.log(’foo’) }, conflicting() { console.log(’from mixin’) } }}const app = Vue.createApp({ mixins: [myMixin], methods: { bar() { console.log(’bar’) }, conflicting() { console.log(’from self’) } }})const vm = app.mount(’#mixins-basic’)vm.foo() // => 'foo'vm.bar() // => 'bar'vm.conflicting() // => 'from self'

而對于鉤子函數就不是簡單的替換了,如果有同名的,他們會被一起合并進數組中,然后依次調用,且mixin的鉤子函數會率先被調用

const myMixin = { created() { console.log(’mixin hook called’) }}const app = Vue.createApp({ mixins: [myMixin], created() { console.log(’component hook called’) }})// => 'mixin hook called'// => 'component hook called'

全局混入和自定義選項

const app = Vue.createApp({ myOption: ’hello!’})// inject a handler for `myOption` custom optionapp.mixin({ created() { const myOption = this.$options.myOption if (myOption) { console.log(myOption) } }})app.mount(’#mixins-global’) // => 'hello!'

上述代碼,我們在全局創建了一個自定義選項,然后進行了全局混入處理,但是需要注意的是,這會影響到這個app所有的子組件:

const app = Vue.createApp({ myOption: ’hello!’})// inject a handler for `myOption` custom optionapp.mixin({ created() { const myOption = this.$options.myOption if (myOption) { console.log(myOption) } }})// add myOption also to child componentapp.component(’test-component’, { myOption: ’hello from component!’})app.mount(’#mixins-global’)// => 'hello!'// => 'hello from component!'

我們可以看到,對于自定義選項這不是簡單的替換,而是分別調用,當然我們也可以制定我們自己的合并策略:

const app = Vue.createApp({})app.config.optionMergeStrategies.customOption = (toVal, fromVal) => { // return mergedVal}

合并策略接收兩個參數,分別是指定項在父實例和子實例的值,當使用mixin的時候我們可以查看打印什么:

const app = Vue.createApp({ custom: ’hello!’})app.config.optionMergeStrategies.custom = (toVal, fromVal) => { console.log(fromVal, toVal) // => 'goodbye!', undefined // => 'hello', 'goodbye!' return fromVal || toVal}app.mixin({ custom: ’goodbye!’, created() { console.log(this.$options.custom) // => 'hello!' }})

可以看到第一次從mixin打印,然后從app打印。

注意事項

mixin很容易造成沖突,你得確保不會有沖突的屬性名,來避免沖突,這會造成額外的負擔 復用性有限,因為mixin不能接受參數,所以邏輯是寫定的,不靈活

所以官方推薦使用 Composition Api來組織邏輯

以上就是詳解Vue的mixin策略的詳細內容,更多關于Vue的mixin策略的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 黄色影院在线 | 国产香蕉久久 | 日韩欧美一区二区久久 | 亚洲第一免费播放区 | 国产精品国产三级国产专播 | 日韩国产午夜一区二区三区 | 成人精品 | 久久99国产精品视频 | 国产91精品一区二区麻豆亚洲 | 96精品视频在线播放免费观看 | 日本亚欧乱色视频在线观看 | 日韩精品久久久免费观看夜色 | 在线观看免费毛片 | 高清一区在线 | 日本高清毛片视频在线看 | 看久久 | 成人久久18免费网站 | 亚洲免费视频网站 | 欧美激情中文字幕 | 九九热精 | 色综合色狠狠天天久久婷婷基地 | 亚洲一区二区视频 | 新久草视频| 欧美一级淫片a免费播放口aaa | 国产一区二区精品久久91 | 色拍自拍亚洲综合在线 | 欧美一级va在线视频免费播放 | 日本丶国产丶欧美色综合 | 久久久久久久性高清毛片 | 亚洲一成人毛片 | 日本vs欧美一区二区三区 | 亚洲精品一区二区手机在线 | 久夜色精品国产一区二区三区 | 国内自拍网址 | 国产精品青草久久福利不卡 | 欧美一级在线观看 | 久久久综合结合狠狠狠97色 | 欧美jizzhd极品欧美 | 欧美日韩一区二区在线观看 | 欧美一级片免费观看 | 国产性较精品视频免费 |