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 相关文章推荐
js onclick事件传参讲解
Nov 06 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
Mar 13 Javascript
高性能JavaScript 重排与重绘(2)
Aug 11 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
Aug 03 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
关于jquery form表单序列化的注意事项详解
Aug 01 jQuery
js实现黑白div块画空心的图形
Dec 13 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 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
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP函数积累总结
2019/03/19 PHP
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
vue二级路由设置方法
2018/02/09 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
解决Python使用列表副本的问题
2019/12/19 Python
Keras自定义IOU方式
2020/06/10 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
财务部岗位职责
2013/11/19 职场文书
新员工入职感言
2014/02/01 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
会计学毕业生求职信
2014/06/25 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
教师考核鉴定意见
2015/06/05 职场文书
神秘岛读书笔记
2015/07/01 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技