vue mixins组件复用的几种方式(小结)


Posted in Javascript onSeptember 06, 2017

最近在做项目的时候,研究了mixins,此功能有妙处。用的时候有这样一个场景,页面的风格不同,但是执行的方法,和需要的数据非常的相似。我们是否要写两种组件呢?还是保留一个并且然后另个一并兼容另一个呢?

不管以上那种方式都不是很合理,因为组件写成2个,不仅麻烦而且维护麻烦;第二种虽然做了兼容但是页面逻辑造成混乱,必然不清晰;有没有好的方法,有那就是用vue的混合插件mixins。混合在Vue是为了提出相似的数据和功能,使代码易懂,简单、清晰。

1.场景

假设我们有几个不同的组件,它们的工作是切换状态布尔、模态和工具提示。这些提示和情态动词不有很多共同点,除了功能:他们看起来不一样,他们不习惯相同,但逻辑是相同的。

//弹框
const Modal = {
 template: '#modal',
 data() {
  return {
   isShowing: false
  }
 },
 methods: {
  toggleShow() {
   this.isShowing = !this.isShowing;
  }
 },
 components: {
  appChild: Child
 }
}

//提示框
const Tooltip = {
 template: '#tooltip',
 data() {
  return {
   isShowing: false
  }
 },
 methods: {
  toggleShow() {
   this.isShowing = !this.isShowing;
  }
 },
 components: {
  appChild: Child
 }
}

上面是一个弹框和提示框,如果考虑做2个组件,或者一个兼容另一个都不是合理方式。请看一下代码

const toggle = {
 data() {
  return {
   isShowing: false
  }
 },
 methods: {
  toggleShow() {
   this.isShowing = !this.isShowing;
  }
 }
}

const Modal = {
 template: '#modal',
 mixins: [toggle],
 components: {
  appChild: Child
 }
};

const Tooltip = {
 template: '#tooltip',
 mixins: [toggle],
 components: {
  appChild: Child
 }
};

用mixins引入toggle功能相似的js文件,进行混合使用

2.可以合并生命周期

//mixin
const hi = {
 mounted() {
  console.log('this mixin!')
 }
}

//vue组件
new Vue({
 el: '#app',
 mixins: [hi],
 mounted() {
  console.log('this Vue instance!')
 }
});

//Output in console
> this mixin!
> this Vue instance!

先输出的是mixins的数据

3、可以全局混合(类似已filter)

Vue.mixin({
 mounted() {
  console.log('hello from mixin!')
 },
 method:{
   test:function(){
   }
  }
})

new Vue({
 el: '#app',
 mounted() {
  console.log('this Vue instance!')
 }
})

会在每一个组件中答应周期中的log,同时里面的方法,类似于vue的prototype添加实例方法一样。

var install = function (Vue, options) {
 // 1. 添加全局方法或属性
 Vue.myGlobalMethod = function () {
  // 逻辑...
 }
 // 2. 添加全局资源
 Vue.directive('my-directive', {
  bind (el, binding, vnode, oldVnode) {
   // 逻辑...
  }
  ...
 })
 // 3. 注入组件
 Vue.mixin({
  created: function () {
   // 逻辑...
  }
  ...
 })
 // 4. 添加实例方法
 Vue.prototype.$myMethod = function (options) {
  // 逻辑...
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery.extend 函数详解
Feb 03 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
Apr 29 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
JS使用eval()动态创建变量的方法
Jun 03 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
JavaScript常见JSON操作实例分析
Aug 08 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
JavaScript 中Date对象的格式化代码方法汇总
Sep 06 #Javascript
jquery实现限制textarea输入字数的方法
Sep 06 #jQuery
Vue的百度地图插件尝试使用
Sep 06 #Javascript
表格展示利器 Bootstrap Table实例代码
Sep 06 #Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 #Javascript
jquery实现用户登陆界面(示例讲解)
Sep 06 #jQuery
详谈js原型继承的一些问题
Sep 06 #Javascript
You might like
php在线代理转向代码
2012/05/05 PHP
php生成微信红包数组的方法
2019/09/05 PHP
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
介绍一下EJB的体系结构
2012/08/01 面试题
转党组织关系介绍信
2014/01/08 职场文书
大学新生军训感言
2014/02/25 职场文书
人力资源职位说明书
2014/07/29 职场文书
高中学校对照检查材料
2014/08/31 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
入党积极分子群众意见
2015/06/01 职场文书
地心历险记观后感
2015/06/15 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技