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 document.images实例
May 27 Javascript
JS版网站风格切换实例代码
Oct 06 Javascript
Jquery 的扩展方法总结
Oct 01 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
JavaScript实现审核流程状态的动态显示进度条
Mar 15 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
May 16 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
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错误日志简单配置方法
2016/07/11 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python随机取list中的元素方法
2018/04/08 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
考博专家推荐信模板
2013/12/02 职场文书
学习雷锋倡议书
2014/04/15 职场文书
党员群众路线承诺书
2014/05/20 职场文书
服务标语大全
2014/06/18 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书