详解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 相关文章推荐
javascript数组使用调用方法汇总
Dec 08 Javascript
jquery统计用户选中的复选框的个数
Jun 06 Javascript
解决WordPress使用CDN后博文无法评论的错误
Dec 15 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
Aug 01 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
Aug 15 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
vue设计一个倒计时秒杀的组件详解
Apr 06 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 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
如何做到多笔资料的同步
2006/10/09 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
原生javascript获取元素样式
2014/12/31 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
vuex实现简易计数器
2016/10/27 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python内建模块struct实例详解
2018/02/02 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
课程设计心得体会
2013/12/28 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
护士个人年度总结范文
2015/02/13 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
病假条格式范文
2015/08/17 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL
处理canvas绘制图片模糊问题
2022/05/11 Javascript