vue---mixins的用法

相信你们都用过less、sass等预编译器。它们中也有mixins,用法也很简单,例如Less中:html

.box{
  border:1px solid red;
  padding:10px;    
}
.mixin{
  .box;
  margin:10px;    
}

编译以后就成了:vue

.box{
  border:1px solid red;
  padding:10px;    
}
.mixin{
  border:1px solid red;
  padding:10px;
  margin:10px;    
}

这样就减小了写的代码量。也达到了公用相一样式的目的。数组

 

而 vue的mixins也是一样的道理。使用公用的内容,达到指定或者全部的实例都共享这些内容。sass

 

那么,vue中的mixins能够定义哪些内容呢?less

官网的说明:混入对象能够包含任意组件选项。当组件使用混入对象时,全部混入对象的选项将被混入该组件自己的选项。ide

大体意思就是:函数

1) 混入对象的内容必须是一个对象。ui

2) 当使用混入时,相同的内容都会合并。this

3) 数据对象若是有相同的,则以被混入的对象中data数据为准spa

后面会详细解释一下这几个意思。

HTML:

<div id="box">{{name}}:{{age}},{{sex}},{{print()}},{{say}} </div>

JS:

var mix={
    el:"#box",
    data:{
        age:18,
        sex:'female',
        name:'八戒'
    },
    mounted:function(){
        this.age++;
        console.log(this.age)//11
    },
    computed:{
        say:function(){
            return '我在mix里面'
        }
    },
    methods:{
        print:function(){
            return '这里是mix';
        }
    }
}

new Vue({
//    el:"#box",
    mixins:[mix],
    data:{
        age:10
    },
    mounted:function(){
        this.age+=2;
        console.log(this.age)//13 this.sex='male';
    },
    computed:{
        say:function(){
            return '我在new Vue里面'
        }
    },
    methods:{
        print:function(){
            return '这里是new Vue';
        }
    }
})

结果:

注意:

1) mixins 这个属性接收的是 一个数组 能够有多个mixins的内容,好比:mixins:[ mix1, mix2 , mix3],前提是定义了这些混入对象,否则就会报错。

2) 从上个栗子能够看出,只要是属于实例(或组件)的内容都是能够混入的,包括 el  。。。  

3) 混入对象中若是有生命周期的 钩子 ,那么 混入对象  和 被混入对象钩子都会被执行一遍,并且 混入对象的钩子将在  实例(或组件)自身钩子以前先执行。由于同名钩子函数将混合为一个数组,所以都将被调用。

4) 混入的方法methods,计算属性computed ,组件components,数据data等,只要值是为对象的,都是会被合并的。而且若是有相同的键值 , 则会以 被混入对象中的 键值 即 以实例(或对象)中的内容为准

4) 好比在 data 中 age 这一项是相同的,这个时候是以 被混入 的对象中数据 优先

5) 因此 age 是 13 就很好理解了。 首先  被混入的对象的data数据优先,那么 age就是 10 ;而后 到达生命周期 mounted 的时候,混入的对象中的代码,执行一次被混入的实例中的代码,再执行一次。 因此最终的结果就是13

 

全局混入

固然,mixins也有全局混入的方法,不过这样会让全部的实例都共享混入的内容。混入的规则仍是同样的。

Vue.mixin({
   //这里是要混入的内容
})

 请谨慎使用全局混入的方法。毕竟只要使用了全局混入,全部实例都会共享  混入的内容  无论你是否   添加了  mixins 这个属性选项。

 

自定义选项合并策略

详细的能够查看官网 自定义选项合并策略

相关文章
相关标签/搜索