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在图片上传的时候压缩图片
Nov 18 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue如何在data中引入图片的正确路径
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中去除所有js,html,css代码
2010/10/12 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
nodejs模块学习之connect解析
2017/07/05 NodeJs
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
利用aardio给python编写图形界面
2017/08/21 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python同步两个文件夹下的内容
2019/08/29 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
节约用水倡议书
2014/04/16 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
公司宣传语大全
2015/07/13 职场文书
导游词之青岛崂山
2019/12/27 职场文书
用Python实现Newton插值法
2021/04/17 Python
OpenCV-Python实现油画效果的实例
2021/06/08 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS