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判断元素是否隐藏的多种方法
May 06 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
JavaScript实战之带收放动画效果的导航菜单
Aug 16 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
node.js遍历目录的方法示例
Aug 01 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 Javascript
jQuery实现二级导航菜单的示例
Sep 30 jQuery
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 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
农民C键的运用技巧
2020/03/04 星际争霸
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
Python标准库之循环器(itertools)介绍
2014/11/25 Python
简单的python后台管理程序
2017/04/13 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
幼儿园毕业家长感言
2014/02/10 职场文书
大学生个人自荐信
2014/02/24 职场文书
母校寄语大全
2014/04/10 职场文书
第一书记观后感
2015/06/08 职场文书
九年级语文教学反思
2016/03/03 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers