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 相关文章推荐
js函数般调用正则
Apr 08 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
Javascript this 关键字 详解
Oct 22 Javascript
用JavaScript实现对话框的教程
Jun 04 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
Aug 04 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
Node 代理访问的实现
Sep 19 Javascript
vuex刷新后数据丢失的解决方法
Oct 18 Javascript
JavaScript实现音乐播放器
Aug 14 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php树型类实例
2014/12/05 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
CI框架附属类用法分析
2018/12/26 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
python基础知识小结之集合
2015/11/25 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
前台接待的工作职责
2013/11/21 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
英文演讲稿
2014/05/15 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
考试作弊检讨
2015/01/27 职场文书
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS