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 相关文章推荐
关于文本框的一些限制控制总结~~
Apr 15 Javascript
跟我学习javascript的最新标准ES6
Nov 20 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 10 Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
js实现简单图片拖拽效果
Feb 22 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
Oracle 常见问题解答
2006/10/09 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
vue实现鼠标经过动画
2019/10/16 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
给Python入门者的一些编程建议
2015/06/15 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
校园运动会广播稿
2014/10/06 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
二年级数学教学反思
2016/02/16 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL