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 相关文章推荐
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
Dec 04 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
Jul 27 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
详解js数组的完全随机排列算法
Dec 16 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
vue项目中axios请求网络接口封装的示例代码
Dec 18 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 output buffering缓存及程序缓存深入解析
2013/07/15 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
Python检测网站链接是否已存在
2016/04/07 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
pycharm安装和首次使用教程
2018/08/27 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
银行贷款委托书范本
2014/10/11 职场文书
大学生求职自荐信
2015/03/24 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python