Vue开发中常见的套路和技巧总结


Posted in Vue.js onNovember 24, 2020

属性排放

export default {
 name: '名称',
 components: { // 组件挂载a},
 created(){} // 数据获取
 beforeMount() {}, // 数据获取
 data: () => ({}), //响应式数据
 computed: {} // 计算属性集合
 methods: {} // 方法集合
 ... // 销毁页面不要的资源
}

管理请求加载状态

async beforeMount(){
 // 开始加载
 this.loading = true
 try {
 const data = await getUserInfo()
 } catch (error) {
 console.log(error)
 } finally {
 // 停止加载
 this.loading = false
 }
}

Proxy跨域

proxy: {
 "/api": {
 target: 'http://.......',
 changeOrigin: true, // 是否改变域名
 ws: true, // socket
 pathRewrite: {
 // 路径重写
 "/api": '' // 对拼接内容进行重写
 }
 },
 ....
}

对developer和build的打包进行不同配置

大部分开发者都喜欢将Vue的config写在一个文件中,看起来是没有问题,但是随着环境的变化,项目优化,WebPack插件,等等具有针对性的配置进来后,就会显得稍微杂乱了,这个时候就可以考虑做单独的配置,通过process.dev分别对不同的环境进行一个config的引入,下面贴出我的配置方式。我在项目根目录下新建了一个config目录,里面将公共的方法进行拆包成一个public.js其他的根据生产环境和线下环境进行一个区分的编译。

-- config
--- dev.js
--- build.js
--- public.js
vue.config.js

# 代码 vue.config.js
const devConfig = require('./config/dev')
const buildConfig = require('./config/build')
module.exports = process.env.NODE_ENV === 'development' ? devConfig : buildConfig

计算属性实用

// 计算属性
computed: {
 filterList: function () {
 return this.showData.filter(function (data) {
 // 返回需要显示的数据
 return data.isShow
 })
}
 
// DOM
 
<ul>
 <li v-for="item in filterList" :key="item.id">
 {{ item.name }}
 </li>
</ul>

集合方法

tableFactory(action) {
 switch (action) {
 case 'update':
 ...
 break;
 
 case 'create':
 ...
 break;
 
 case 'delete':
 ...
 break;
 
 default:
 // ...默认获取列表
 break;
 }
}

保持对Props的数据验证规范

props: {
 test: {
  type: String,
  default: ''
 },
 test2: {
  type: [Number, String],
  default: 1
 },
 test3: {
  required: false,
  type: Object
 }
}

组件名称使用

大多时候,我们在组件中定义的name都是作为在template模板中使用的名称,这里建议使用驼峰命名,因为在vue中对驼峰命名做出了很好的解析。

// GanMessage.vue组件
export default {
 name: 'GanMessage'
 .....
}

// 引入后使用
components: {
 [GanMessage.name]: GanMessage
}

// 模板中使用
<template>
 <gan-message/>
</template>

模板引擎调试

大多数时候,在template上面写一些逻辑非常难调试,都是直接看效果的,对于一些值来说,变得无法掌控,所以说在开发环境中,我都会在原型上挂一个全局的console.log方法进行调试

vue.prototype.$logs = window.console.log;

// 使用
<template>
 {{$logs('1111')}}
</template>

获取数据的生命周期

对于数据的获取一直都是又存在争议的,大部分同学都是在created中获取的吧,我个人是在beforeMount中进行后台数据请求获取的

async beforeMount(){
 const data = await getUserInfo();
}

使用async 和 await

大多数时候,在使用Promise的时候都是通过.then,.catch,.finally来进行处理的。但其实我更加的推荐使用async异步函数的方式来进行Pormise的处理,我们只需要进行数据的获取就好了,通过try异常捕获可以快速的对错误进行一个好的排查和抛出。参考上面获取数据的生命周期可以看到

async beforeMount(){
 try {
  const data = await getUserInfo()
 } catch (error) {
  console.log(error)
 } finally {}
}

watch

watch: {
 obj: {
  handler(newName, oldName) {
   console.log('obj.a changed');
  },
  immediate: true,
  deep:true
 },
 'obj.a': {
 handler(newName, oldName) {
  console.log('obj.a changed');
 },
 immediate: true,
 // deep: true
 }
 
 }

在自定义事件中,该值是从其子组件中捕获的值

<!-- Child -->
<template>
 <input type="text" @input="$emit('custom-event', 'hello')" />
</template>

<!-- Parent -->
<template>
 <Child @custom-event="handleCustomevent" />
</template>

<script>
export default {
 methods: {
 handleCustomevent (value) {
  console.log(value) // hello
 }
 }
}
</script>

总结

到此这篇关于Vue开发中常见的套路和技巧总结的文章就介绍到这了,更多相关Vue开发常见套路和技巧内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
Vue详细的入门笔记
May 10 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
浅析VUE防抖与节流
Nov 24 #Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 #Vue.js
Vue 的 v-model用法实例
Nov 23 #Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 #Vue.js
详解vue 组件注册
Nov 20 #Vue.js
You might like
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
JS验证码实现代码
2017/09/14 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Scrapy框架使用的基本知识
2018/10/21 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python GUI编程完整示例
2019/04/04 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
机械专业求职信范文
2014/07/15 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
八一建军节主持词
2015/07/01 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL