加入收藏 | 设为首页 | 会员中心 | 我要投稿 湘西站长网 (https://www.0743zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

vue中mixin合并策略怎样理解?怎样应用?

发布时间:2022-01-01 00:57:26 所属栏目:语言 来源:互联网
导读:这篇文章主要介绍vue中mixin合并策略的内容,下文有详细的介绍及示例可以参考,对大家学习vue框架有一定的参考价值,需要的朋友可以了解看看,希望大家阅读完这篇文章能有所收获,接下来就跟随小编学习一下吧。 我之前一直以为mixin的合并是以组件内的优先,
   这篇文章主要介绍vue中mixin合并策略的内容,下文有详细的介绍及示例可以参考,对大家学习vue框架有一定的参考价值,需要的朋友可以了解看看,希望大家阅读完这篇文章能有所收获,接下来就跟随小编学习一下吧。
 
    我之前一直以为mixin的合并是以组件内的优先,即mixin的内容如果和组件内有冲突的,以组件内为准,确实存在这种情况,但是vue指定的策略更详细,下面分别记录各种情况对应的合并策略
 
    基本
 
    当一个组件使用mixin的时候,所有mixin的选项会被混入到组件自己的选项中, 这部分没什么好说的,直接看代码
 
// define a mixin object
const myMixin = {
 created() {
  this.hello()
 },
 methods: {
  hello() {
   console.log('hello from mixin!')
  }
 }
}
 
// define an app that uses this mixin
const 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 option
app.mixin({
 created() {
  const myOption = this.$options.myOption
  if (myOption) {
   console.log(myOption)
  }
 }
})

 
// add myOption also to child component
app.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打印。

(编辑:湘西站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读