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 继承的实现
Jul 09 Javascript
javascript 多浏览器 事件大全
Mar 23 Javascript
基于jQuery的js分页代码
Jun 10 Javascript
有关js的变量作用域和this指针的讨论
Dec 16 Javascript
js不能跳转到上一页面的问题解决方法
Mar 01 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
Feb 27 Javascript
node.js require() 源码解读
Dec 13 Javascript
JS动态增删表格行的方法
Mar 03 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
解决vue中的无限循环问题
Jul 27 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP无限分类(树形类)
2013/09/28 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
php实现socket推送技术的示例
2017/12/20 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
二年级数学教学反思
2016/02/16 职场文书
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技