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 相关文章推荐
JS window.opener返回父页面的应用
Oct 24 Javascript
jquery 追加tr和删除tr示例代码
Sep 12 Javascript
js数组方法扩展实现数组统计函数
Apr 09 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
AngularJS基础 ng-list 指令详解及示例代码
Aug 02 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
Node.js系列之发起get/post请求(2)
Aug 30 Javascript
原生JS实现拖拽功能
Dec 16 Javascript
Selenium执行JavaScript脚本的方法示例
Dec 31 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
重定向实现代码
2006/11/20 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
JS中Location使用详解
2015/05/12 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
python导入pandas具体步骤方法
2019/06/23 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
十八届三中全会宣传方案
2014/02/21 职场文书
国庆节演讲稿
2014/05/27 职场文书
公务员年度考核评语
2014/12/31 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
python unittest单元测试的步骤分析
2021/08/02 Python
Go并发4种方法简明讲解
2022/04/06 Golang
Python如何使用循环结构和分支结构
2022/04/13 Python