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 相关文章推荐
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 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小程序自动提交到自助友情连接
2009/11/24 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
跟老齐学Python之模块的加载
2014/10/24 Python
Python运算符重载用法实例
2015/05/28 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
python 实现字符串下标的输出功能
2020/02/13 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
大学生物业管理求职信
2013/10/24 职场文书
中学教师自我鉴定
2014/02/07 职场文书
公共场所禁烟标语
2014/06/25 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
公司员工培训管理制度
2015/08/04 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
SQL SERVER存储过程用法详解
2022/02/24 SQL Server