《Vue2 十一》Vue中的混入

mixin用来分发Vue组件中可复用的功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,混入对象的所有选项将被混合进该组件本身的选项。

定义混入:

定义局部混入:
// 定义一个混入对象
var myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}

// 定义一个使用混入对象的组件
var Component = Vue.extend({
  mixins: [myMixin]
})
定义全局混入:

一旦使用全局混入,它将影响每一个之后创建的Vue实例。使用时要格外小心。

// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
  
})

选项合并:

  1. 数据对象:数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。
    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" }
      }
    })
    
  2. 钩子:同名钩子函数将合并为一个数组,因此都将被调用。混入对象的钩子将在组件自身钩子之前调用。
    var mixin = {
      created: function () {
        console.log('混入对象的钩子被调用')
      }
    }
    
    new Vue({
      mixins: [mixin],
      created: function () {
        console.log('组件钩子被调用')
      }
    })
    
    // => "混入对象的钩子被调用"
    // => "组件钩子被调用"
    
  3. 值为对象的选项:比如methods,将被合并为同一个对象,两个对象键名冲突时,取组件对象的键值对。
    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"
    

版权声明:本文为wsln_123456原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。