详解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字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JavaScript返回网页中超链接数量的方法
Apr 03 Javascript
javascript中replace( )方法的使用
Apr 24 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
AngularJS 指令详细介绍
Jul 27 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
亲自动手实现vue日历控件
Jun 26 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中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
轻松实现php文件上传功能
2017/02/17 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
JS代码格式化和语法着色V2
2006/10/14 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
vue router demo详解
2017/10/13 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
js实现旋转的星空效果
2019/11/01 Javascript
python一键升级所有pip package的方法
2017/01/16 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
python实现二维插值的三维显示
2018/12/17 Python
Python中字符串与编码示例代码
2019/05/20 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
土建施工员岗位职责
2015/04/11 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
golang import自定义包方式
2021/04/29 Golang
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫