详解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 相关文章推荐
jQuery判断元素是否存在的可靠方法
May 06 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
JS模拟浏览器实现全局搜索功能
Sep 11 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
May 19 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 get_meta_tags()函数
2014/05/12 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php生成RSS订阅的方法
2015/02/13 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Django如何实现上传图片功能
2019/08/16 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
环境科学专业个人求职信
2013/12/15 职场文书
纪检监察立案决定书
2015/06/24 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript