深入了解Vue.js 混入(mixins)


Posted in Javascript onJuly 23, 2020

混入 (mixins)定义了一部分可复用的方法或者计算属性。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。

来看一个简单的实例:

var vm = new Vue({
  el: '#databinding',
  data: {
  },
  methods : {
  },
});
// 定义一个混入对象
var myMixin = {
  created: function () {
    this.startmixin()
  },
  methods: {
    startmixin: function () {
      document.write("欢迎来到混入实例");
    }
  }
};
var Component = Vue.extend({
  mixins: [myMixin]
})
var component = new Component();

选项合并

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

比如,数据对象在内部会进行浅合并 (一层属性深度),在和组件的数据发生冲突时以组件数据优先。

以下实例中,Vue 实例与混入对象包含了相同的方法。从输出结果可以看出两个选项合并了。

var mixin = {
  created: function () {
    document.write('混入调用' + '<br>')
  }
}
new Vue({
  mixins: [mixin],
    created: function () {
    document.write('组件调用' + '<br>')
  }
});

输出结果为:

混入调用
组件调用

如果 methods 选项中有相同的函数名,则 Vue 实例优先级会较高。如下实例,Vue 实例与混入对象的 methods 选项都包含了相同的函数:

var mixin = {
  methods: {
    hellworld: function () {
      document.write('HelloWorld 方法' + '<br>');
    },
    samemethod: function () {
      document.write('Mixin:相同方法名' + '<br>');
    }
  }
};
var vm = new Vue({
  mixins: [mixin],
  methods: {
    start: function () {
      document.write('start 方法' + '<br>');
    },
    samemethod: function () {
      document.write('Main:相同方法名' + '<br>');
    }
  }
});
vm.hellworld();
vm.start();
vm.samemethod();

输出结果为:

HelloWorld 方法
start 方法
Main:相同方法名

以上实例,我们调用了以下三个方法:

vm.hellworld();
vm.start();
vm.samemethod();

从输出结果 methods 选项中如果碰到相同的函数名则 Vue 实例有更高的优先级会执行输出。

全局混入

也可以全局注册混入对象。注意使用! 一旦使用全局混入对象,将会影响到 所有 之后创建的 Vue 实例。使用恰当时,可以为自定义对象注入处理逻辑。

// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
 created: function () {
  var myOption = this.$options.myOption
  if (myOption) {
   console.log(myOption)
  }
 }
})
 
new Vue({
 myOption: 'hello!'
})
// => "hello!"

谨慎使用全局混入对象,因为会影响到每个单独创建的 Vue 实例 (包括第三方模板)。

以上就是深入了解Vue.js 混入的详细内容,更多关于Vue.js 混入的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javascript 二维数组的实现与应用
Mar 16 Javascript
加载 Javascript 最佳实践
Oct 30 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
Jun 05 Javascript
javascript简单事件处理和with用法介绍
Sep 16 Javascript
Javascript毫秒数用法实例
Feb 05 Javascript
jQuery的each循环用法简单示例
Jun 12 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 Javascript
javascript数据类型详解
Feb 07 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
Apr 17 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
JS实现简单移动端鼠标拖拽
Jul 23 #Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 #Javascript
JS实现鼠标按下拖拽效果
Jul 23 #Javascript
javascript利用canvas实现鼠标拖拽功能
Jul 23 #Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 #Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 #Javascript
JS前后端实现身份证号验证代码解析
Jul 23 #Javascript
You might like
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python字典DICT类型合并详解
2017/08/17 Python
PyQt5实现拖放功能
2018/04/25 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
小学亲子活动总结
2014/07/01 职场文书
公积金贷款承诺书
2015/04/30 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技