详解vue mixins和extends的巧妙用法


Posted in Javascript onDecember 20, 2017

vue提供了mixins、extends配置项,最近使用中发现很好用。

混合mixins和继承extends

看看官方文档怎么写的,其实两个都可以理解为继承,mixins接收对象数组(可理解为多继承),extends接收的是对象或函数(可理解为单继承)。

继承钩子函数

const extend = {
 created () {
  console.log('extends created')
 }
}
const mixin1 = {
 created () {
  console.log('mixin1 created')
 }
}
const mixin2 = {
 created () {
  console.log('mixin2 created')
 }
}
export default {
 extends: extend,
 mixins: [mixin1, mixin2],
 name: 'app',
 created () {
  console.log('created')
 }
}

控制台输出

extends created
mixin1 created
mixin2 created
created
  • 结论: 优先调用mixins和extends继承的父类,extends触发的优先级更高,相对于是队列
  • push(extend, mixin1, minxin2, 本身的钩子函数)
  • 经过测试, watch的值 继承规则一样。

继承methods

const extend = {
 data () {
  return {
   name: 'extend name'
  }
 }
}
const mixin1 = {
 data () {
  return {
   name: 'mixin1 name'
  }
 }
}
const mixin2 = {
 data () {
  return {
   name: 'mixin2 name'
  }
 }
}
// name = 'name'
export default {
 mixins: [mixin1, mixin2],
 extends: extend,
 name: 'app',
 data () {
  return {
   name: 'name'
  }
 }
}
// 只写出子类,name = 'mixin2 name',extends优先级高会被mixins覆盖
export default {
 mixins: [mixin1, mixin2],
 extends: extend,
 name: 'app'
}
// 只写出子类,name = 'mixin1 name',mixins后面继承会覆盖前面的
export default {
 mixins: [mixin2, mixin1],
 extends: extend,
 name: 'app'
}
  • 结论:子类再次声明,data中的变量都会被重写,以子类的为准。
  • 如果子类不声明,data中的变量将会最后继承的父类为准。
  • 经过测试, props中属性 、 methods中的方法 和 computed的值 继承规则一样。

下面单独介绍下mixins、extends、extend

mixins

调用方式: mixins: [mixin1, mixin2]

是对父组件的扩充,包括methods、components、directive等。。。

触发钩子函数时,先调用mixins的函数,再调用父组件的函数。

虽然也能在创建mixin时添加data、template属性,但当父组件也拥有此属性时以父为准,从这一点也能看出制作者的用心(扩充)。

data、methods内函数、components和directives等键值对格式的对象均以父组件/实例为准

extends

调用方式: extends: CompA

同样是对父组件的扩充,与mixins类似,但优先级均次于父组件

extend

扩展组件的构造器

当我们调用vue.component('a', {...})时自动调用

值得注意的是extend内的data为一个函数

总结

以上所述是小编给大家介绍的vue mixins和extends的巧妙用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 提交和设置表单的值
Dec 19 Javascript
Javascript常考语句107条收集
Mar 09 Javascript
javascript的数据类型、字面量、变量介绍
May 23 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
js中日期的加减法
May 06 Javascript
Vue.js中extend选项和delimiters选项的比较
Jul 17 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
如何解决.vue文件url引用文件的问题
Jan 18 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
canvas轨迹回放功能实现
Dec 20 #Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 #jQuery
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 #Javascript
浅谈gulp创建完整的项目流程
Dec 20 #Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 #Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 #Javascript
详解JS模块导入导出
Dec 20 #Javascript
You might like
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python3实现Web网页图片下载
2016/01/28 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
金士达面试非笔试
2012/03/14 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
百年校庆节目主持词
2014/03/27 职场文书
班组长竞聘书
2014/03/31 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
五年级学生期末评语
2014/12/26 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
MySQL如何解决幻读问题
2021/08/07 MySQL
centos8安装MongoDB的详细过程
2021/10/24 MongoDB