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 相关文章推荐
如何用javascript去掉字符串里的所有空格
Feb 08 Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
JSON无限折叠菜单编写实例
Dec 16 Javascript
原生JS实现LOADING效果
Mar 16 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
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实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
js实现登录验证码
2016/12/22 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
出国留学自荐信
2013/10/25 职场文书
卫校毕业生自我鉴定
2013/10/31 职场文书
社区母亲节活动方案
2014/03/05 职场文书
房屋转让协议书
2014/04/11 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
党员个人总结范文
2015/02/14 职场文书
任命书格式模板
2015/09/22 职场文书
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle