全局混入、局部混入

混入

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

我们暂时从全局混入的角度来讲述它的一些特性

全局混入

在main.js中定义mixin,在需要的使用的页面直接使用,不需要再引入(使用方法同局部混入)

属性合并

当实例和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。数据对象在内部会进行递归合并,并在发生冲突时以实例数据优先
1、属性合并

        Vue.mixin({
            data() {
                return {
                    username: 'mixin',
                    age: '18'//只有混入定义了age属性,则值会调用混入的属性
                }
            },

        })

        var vm = new Vue({
            el: "#app",
            data: {
                username: "root"//这里和混入一样定义了username属性,但是会以实例这边的属性优先
            },
            created() {
                console.log(this.username, this.age)//实例的username属性,混入的age属性
            },

        })

在这里插入图片描述
2、方法的合并

        Vue.mixin({
            data() {
                return {
                    username: 'mixin',
                    age: '18'
                }
            },
            methods: {
                getusername() {//混入方法返回age
                    return this.age;
                }
            }
        })

        var vm = new Vue({
            el: "#app",
            data: {
                username: "root"
            },
            methods: {
                getusername() {//实例返回username
                    return this.username;
                }
            },
            mounted() {
                console.log(this.getusername())
            }
        })

在这里插入图片描述
我们混入和实例都有相同名称的方法,这里就依旧实例优先,打印了root,如果我们将实例的方法注释掉,则会打印出age

        //全局混入
        Vue.mixin({
            data() {
                return {
                    username: 'mixin',
                    age: '18'
                }
            },
            methods: {
                getusername() {
                    return this.age;
                }
            }
        })

        var vm = new Vue({
            el: "#app",
            data: {
                username: "root"
            },
            // methods: {
            //     getusername() {
            //         return this.username;
            //     }
            // },
            mounted() {
                console.log(this.getusername())
            }
        })

在这里插入图片描述

同名钩子函数将合并为一个数组,因此都将被调用。但是,混入对象的钩子将在实例钩子之前调用

 //全局混入
Vue.mixin({
	beforeCreate(){
		console.log("from mixin beforeCreate")
	},
	created () {
		console.log("from mixin Create")
	},
})

//实例
var vm = new Vue({
	el:"#app",
	data:{},
	beforeCreate () {
		console.log("from root beforeCreate")
    },
    created () {
    	console.log("from root created")
    },
})

钩子函数

局部混入

局部混入一样拥有混入的特性,同名属性和方法均以实例优先,钩子函数会都执行但是混入优先执行

        //局部混入,这里我们创建了两个局部混入
	
	//局部混入1
        const mixin1={
            data:function(){
                return {age:18}//这里定义age
            }
        }
	//局部混入2
        const mixin2={
            methods:{
                getcity(){//获取城市方法
                    return '北京'
                }
            }
        }

	//vue实例
        var vm = new Vue({
            mixins: [mixin1,mixin2],//引用局部注入
            el:"#app",
            data:{
                username:"root",
                age:20
            },
            methods: {
                getcity(){//获取城市
                    return '上海'
                }
            },
            created () {
              console.log(this.getcity())
              console.log(this.age)  
            }
        })

局部混入

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值