美文网首页
vue 混入-19

vue 混入-19

作者: 尼莫nemo | 来源:发表于2018-11-22 10:19 被阅读0次

    什么是混入

    混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。

    // 定义一个混入对象
    //对象中使用this是因为我他定义的是混入组件  他将要合并到组件中求
    var myMixin = {
      created: function () {
        this.hello()
      },
      methods: {
        hello: function () {
          console.log('hello from mixin!')
        }
      }
    }
    
    // 定义一个使用混入对象的组件
    var Component = Vue.extend({
      mixins: [myMixin]
    })
    //在调用组件的时候因为混入对象中书写了created,他会作为组件的生命周期来使用
    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"
    

    全局混入对象会影响创建实例的每一个

    // 为自定义的选项 'myOption' 注入一个处理器。
    Vue.mixin({
      created: function () {
        var myOption = this.$options.myOption
        if (myOption) {
          console.log(myOption)
        }
      }
    })
    
    new Vue({
      myOption: 'hello!'
    })
    // => "hello!"
    

    谨慎使用全局混入对象

    自定义选项合并策略

    用的时候在来看

    相关文章

      网友评论

          本文标题:vue 混入-19

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