Vue用mixin合并重复代码的实现


Posted in Vue.js onNovember 27, 2020

       在我们做项目的时候,往往有很多代码逻辑是通用的,比如说,业务逻辑类型的判断,时间戳的转换,url中字符串的截取等等,这些函数如果在每个需要的页面中都加入的话,不仅加重了当前页面的逻辑复杂程度,还会占用大量原本可以省略的内存。因此,将这些代码整理出来统一管理是很有必要的,在vue项目中,我们都知道模块化和组件化,但vue的框架中还有一个很好用的知识点,就是mixin

      mixin不仅可以存放data、watch、methods、computed等,还可以存放Vue的生命周期,是不是很神奇呢?

     通过点击按钮“点击我”,实现“难受”和“极好的”相互切换,首先上效果图:

     初始页面:

Vue用mixin合并重复代码的实现

       子组件1和子组件2都可以通过“点击我”,实现状态改变,通过触发子组件1的按钮1,触发子组件2的按钮2次,效果如下:

Vue用mixin合并重复代码的实现

      项目的核心结构如下:

Vue用mixin合并重复代码的实现

       其中,新增了mixin文件夹,新增了Child1.vue和Child2.vue,更改HelloWorld.vue为Father.vue,因为本人有代码洁癖,觉得vueRouter默认的hash模式,会使得前端路由有些难看,所以改成了history模式,项目更改的文件代码如下

Child1.vue

<template>
  <div class="Child1">
    <h1>我是子组件1</h1>
    <p>我现在很{{status}}</p>
    <button @click="submitChange">点击我</button>
  </div>
</template>
 
<script>
import { Happy } from '../mixin/showHappy'
export default {
  name: "Child1",
  mixins: [Happy]
}
</script>

Child2.vue 

<template>
  <div class="Child2">
    <h1>我是子组件2</h1>
    <p>我现在很{{status}}</p>
    <button @click="submitChange">点击我</button>
  </div>
</template>
 
<script>
import { Happy } from '../mixin/showHappy'
export default {
  name: "Child2",
  mixins: [Happy]
}
</script>

Father.vue

<template>
 <div class="Father">
  <h1>我是父组件</h1>
  <child1-component />
  <child2-component />
 </div>
</template>
 
<script>
import Child1Component from './Child1'
import Child2Component from './Child2'
export default {
 name: 'Father',
 data () {
  return {
   msg: 'Welcome to Your Vue.js App'
  }
 },
 components:{
  Child1Component,
  Child2Component
 }
}
</script>

mixin/showHappy.js

/*这里是专门用来进行mixin测试的(通过点击按钮会相应的改变对应状态)*/
export const Happy = {
  data(){
    return{
      isRealHappy:true,
      status: '',
      sad: '难受',
      comfort: '舒服'
    }
  },
  methods:{
    submitChange(){
      if(this.isRealHappy){
        this.isRealHappy = !this.isRealHappy
        this.status = this.comfort
      }else{
        this.isRealHappy = !this.isRealHappy
        this.status = this.sad
      }
    }
  }
}

router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Father from '@/components/Father'
 
Vue.use(Router)
 
const routes = [
 {
  path: '/',
  name: 'Father',
  component: Father
 }
]
const routers = new Router({
 mode: 'history',
 routes
})
export default routers

那么,代码贴了这么多,mixin究竟有啥用呢?那就是代码复用

Vue用mixin合并重复代码的实现

如果我们不用mixin这种方式,直接把这段代码贴到Child1.vue和Child2.vue中,也是可以实现与页面展示一样的效果:

Vue用mixin合并重复代码的实现

Vue用mixin合并重复代码的实现

         很显然,mixin的书写方式更优雅,虽然项目中没有这么简单的代码,但这是一种思想! 让我们更精致一些,让项目让代码尽可能高类聚低耦合,如此一来,我们必然会成为更优秀的程序员!         

顺便提及一下使用小细节,如果在组件中出现了与mixin中相同的属性或方法,会优先展示组件中的属性和方法哦!各位小伙伴,一起加油吧!

到此这篇关于Vue用mixin合并重复代码的实现的文章就介绍到这了,更多相关Vue mixin合并重复代码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 #Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 #Vue.js
vuex的数据渲染与修改浅析
Nov 26 #Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 #Vue.js
vue单元格多列合并的实现
Nov 26 #Vue.js
VUE项目实现主题切换的多种方法
Nov 26 #Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 #Vue.js
You might like
PHP获得数组交集与差集的方法
2015/06/10 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
javascript 跳转代码集合
2009/12/03 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
QML使用Python的函数过程解析
2019/09/26 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Python持续监听文件变化代码实例
2020/07/22 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
婚假请假条怎么写
2014/04/10 职场文书
地质灾害防治方案
2014/05/14 职场文书
文明家庭事迹材料
2014/12/20 职场文书
安全员岗位职责
2015/02/10 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL