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 相关文章推荐
ASP Json Parser修正版
Dec 06 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
Jan 19 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
Angular 向组件传递模板的两种方法
Feb 23 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
微信小程序实现手势滑动效果
Aug 26 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
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
第四章 php数学运算
2011/12/30 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python中退出多层循环的方法
2018/11/27 Python
python调用c++传递数组的实例
2019/02/13 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Django工程的分层结构详解
2019/07/18 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
2015国际残疾人日活动总结
2015/03/24 职场文书
2015选调生工作总结
2015/07/24 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
JavaScript实现音乐播放器
2022/08/14 Javascript