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 相关文章推荐
javascript实现的像java、c#之类的sleep暂停的函数代码
Mar 04 Javascript
Javascript中引用示例介绍
Feb 21 Javascript
使用js画图之画切线
Jan 12 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
react以create-react-app为基础创建项目
Mar 14 Javascript
vue自定义指令实现方法详解
Feb 11 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
js代码实现轮播图
May 04 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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
人大复印资料处理程序_输入篇
2006/10/09 PHP
php 禁止页面缓存输出
2009/01/07 PHP
php二维数组转成字符串示例
2014/02/17 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Python列表切片用法示例
2017/04/19 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python networkx包的实现
2020/02/14 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
P/Invoke是什么
2015/07/31 面试题
日语专业个人求职信范文
2014/02/02 职场文书
幼儿教师求职信
2014/05/24 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
年终工作总结范文2014
2014/11/27 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
Python可视化学习之seaborn调色盘
2022/02/24 Python