深入了解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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
js和php如何获取当前url的内容
Sep 22 Javascript
JS增加行复制行删除行的实现代码
Nov 09 Javascript
js实现文字跟随鼠标移动而移动的方法
Feb 28 Javascript
jQuery中$(function() {});问题详解
Aug 10 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
浅谈javascript中的三种弹窗
Oct 21 Javascript
js实现类bootstrap模态框动画
Feb 07 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 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
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
基于PHP制作验证码
2016/10/12 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
Z-Blog中用到的js代码
2007/03/15 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
Python list操作用法总结
2015/11/10 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
python的unittest测试类代码实例
2017/12/07 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
python 日志 logging模块详细解析
2020/03/31 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python使用建议与技巧分享(二)
2020/08/17 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
2015年林业工作总结
2015/05/14 职场文书
上诉答辩状范文
2015/05/22 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android