美文网首页
mixin理解与使用

mixin理解与使用

作者: 李友胜 | 来源:发表于2019-08-23 22:14 被阅读0次
    基础

    混入 (mixin) 提供了一种非常灵活的方式,来分发vue组件中的可复用功能。一个混入对象可以包含任务组件选项。当组件使用混入对象时,所欲混入对象的选项将被“混合”进入该组件本身的选项。

    // 定义一个混入对象
    var myMixin = {
      created: function () {
        this.hello()
      },
      methods: {
        hello: function () {
          console.log('hello from mixin!')
        }
      }
    }
    
    // 定义一个使用混入对象的组件
    var Component = Vue.extend({
      mixins: [myMixin]
    })
    
    var component = new Component() // => "hello from mixin!"
    
    选项合并

    当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行合并。冲突时以组件的数据为优先

    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" }
      }
    })
    

    同名钩子函数将合并为一个数组,因此都将会被调用,混入对象的钩子函数将在组件自身钩子之前调用。

    var mixin = {
      created: function () {
        console.log('混入对象的钩子被调用')
      }
    }
    
    new Vue({
      mixins: [mixin],
      created: function () {
        console.log('组件钩子被调用')
      }
    })
    
    // => "混入对象的钩子被调用"
    // => "组件钩子被调用"
    

    值为对象的选项,例如methods、components和directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

    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实例。

    相关文章

      网友评论

          本文标题:mixin理解与使用

          本文链接:https://www.haomeiwen.com/subject/lhyxectx.html