Vue之Mixins(混入)的使用方法


Posted in Javascript onSeptember 24, 2019

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

当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。

比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。

var Mymixin = {
  data: function(){
   return {
    message: 'hello',
    foo: 'abc'
   }
  }
}
 export default {
  mixins:[Mymixin],
  data(){
   return{
    message:'good',
    bar:'kiss'
   }
   
  },
  created(){
   console.log(this.$data) //bar: "kiss",foo: "abc",message: "good"
  },

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

<script>
var Mymixin = {
  created: function(){
   console.log('混入对象的钩子被调用')
  }
}
 export default {
  mixins:[Mymixin],
  data(){
   return{
    message:'good',
    bar:'kiss'
   }
   
  },
  created(){
   console.log('组件钩子被调用') 
   // 混入对象的钩子被调用
   // 组件钩子被调用
  }
 }
</script>

值为对象的选项,

例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

<script>
var Mymixin = {
  methods: {
   foo: function(){
    console.log('foo')
   },
   conflicting: function(){
    console.log('from mixin')
   }
  }
}
 export default {
  mixins:[Mymixin],
  created(){
   this.foo()
   this.conflicting()
   this.bar() 
   // foo
   // from self
   // bar
  },
  methods:{
   bar:function(){
    console.log('bar')
   },
   conflicting: function(){
      console.log('from self')
   }
  }
 }
</script>

全局混入

混入也可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。

// 为自定义的选项 'myOption' 注入一个处理器。可在main.js中写入
Vue.mixin({
 created: function () {
  var myOption = this.$options.myOption
  if (myOption) {
   console.log(myOption)
  }
 }
})
在任意组件里面都可以使用
new Vue({
 myOption: 'hello!'
})
// => "hello!"
export default {
  myOption: 'hello!',
 }

请谨慎使用全局混入,因为它会影响每个单独创建的 Vue 实例 (包括第三方组件)。大多数情况下,只应当应用于自定义选项,就像上面示例一样。推荐将其作为插件发布,以避免重复应用混入。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
微信小程序之购物车功能
Sep 23 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
深入理解vue2.0路由如何配置问题
Jul 18 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
Vue的状态管理vuex使用方法详解
Feb 05 Javascript
javascript实现获取中文汉字拼音首字母
May 19 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
JavaScript Array对象使用方法解析
Sep 24 #Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 #Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 #Javascript
基于layui的下拉列表的数据回显方法
Sep 24 #Javascript
Layui动态生成select下拉选择框不显示的解决方法
Sep 24 #Javascript
layui动态渲染生成select的option值方法
Sep 23 #Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 #Javascript
You might like
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Bootstrap表单布局
2016/07/19 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
python web基础之加载静态文件实例
2018/03/20 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
流动人口婚育证明
2014/10/19 职场文书
八达岭长城导游词
2015/01/30 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
学生会部长竞选稿
2015/11/19 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL