唯品秀前端博客
当前位置: 前端开发 > Vue.js专区 > 轻松理解vue.js中的mixins(混合)

轻松理解vue.js中的mixins(混合)

2018-08-10 分类:Vue.js专区 作者:管理员 阅读(1598)

什么是mixins?

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

官方说的总是些屁话

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

了解mixins大致结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 定义一个混入对象
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

选项合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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实例

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var mixin = {
  created: function () {
    console.log('混入对象的钩子被调用')
  }
}

new Vue({
  mixins: [mixin],
  created: function () {
    console.log('组件钩子被调用')
  }
})

// => "混入对象的钩子被调用"
// => "组件钩子被调用"

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

全局混入

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
  created: function () {
    var myOption = this.$options.myOption
    if (myOption) {
      console.log(myOption)
    }
  }
})

new Vue({
  myOption: 'hello!'
})
// => "hello!"

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

小结

总体来说mixin是个比较实用,而且很简单的东西,只是如果你没仔细去看去理解,觉得有点神秘,或者官方说的有点拗口,用一次就知道了,就是个代码方法重用。要注意的就是,mixins和vue上相同的data属性和相同的函数名,在调用时候,拿到的始终是vue实例上定义的那个,mixins里面的定义data及其事件啥的权限相对低于外面vue实例。

「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(3) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
3

谢谢你请我吃鸡腿*^_^*

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 条评论 - 轻松理解vue.js中的mixins(混合)

博客简介

唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与,主题源码 

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 243 篇
  • 草稿数目: 0 篇
  • 分类数目: 15 个
  • 独立页面: 6 个
  • 评论总数: 907 条
  • 链接总数: 14 个
  • 标签总数: 433 个
  • 建站时间: 1067 天
  • 注册用户: 3712 人
  • 访问总量: 8696502 次
  • 最近更新: 2019年11月14日
服务热线:
 173xxxx7240

 QQ在线交流

 旺旺在线