详解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从头学起第二讲
Jul 04 Javascript
用js模拟JQuery的show与hide动画函数代码
Sep 20 Javascript
用JQuery调用Session的实现代码
Oct 29 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
常规表格多表头查询示例
Feb 21 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
JavaScript中数组Array方法详解
Feb 27 Javascript
Javasript设计模式之链式调用详解
Apr 26 Javascript
详解使用 Node.js 开发简单的脚手架工具
Jun 08 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
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临时文件的安全性分析
2014/07/04 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
四风问题自查报告剖析材料
2014/02/08 职场文书
教师评语大全
2014/04/28 职场文书
班级标语大全
2014/06/21 职场文书
大学生工作求职信
2014/06/23 职场文书
小学假期安全广播稿
2014/09/28 职场文书
运动会广播稿50字
2015/08/19 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL