vue中的mixins混合正确使用方法
文章 1657 0 0 0
发布时间:2019年12月05日

概述

什么是mixins?

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

大白话,mixins可以理解成常见函数封装,比如一个方法你想到处使用,是不是可以提个文件出来封装个函数,对的,mixins就是干这么个事

了解mixins大致结构

// 定义一个混入对象

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!"

看到没,这玩意儿自身还能有生命周期,并且有个核心东西methods

选项合并

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

这段代码说的意思就是如果你在mixin中定义了data,将mixin方法混合到一个组件中区使用,这时候在组件中你又重新定义了这个data,那么最终你使用的时候拿到的这个data是你当前页面拿到的data值,但你可能想象这是就近原则?那么错了,假设在mixins中同样去打印this.message,你会发现打印结果依然是goodbye,而并不是hello。

mixins里面的定义data及其事件啥的权限相对低于外面vue实例。

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

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

这段代码想说的无非就是mixin里面的钩子函数也就是生命周期会比你组件中定义的先执行

全局混入

也可以全局注册混入对象。注意使用! 一旦使用全局混入对象,将会影响到 所有 之后创建的 Vue 实例。使用恰当时,可以为自定义对象注入处理逻辑。

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

这玩意儿就是说如果你直接挂Vue的实例上,那这东西在整个项目都可以去直接耍,并且还能取影响你使用的第三框框架,前面我们都是定义个mixin,在需要的组件中区混入

评论专区