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使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
Vue详细的入门笔记
May 10 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
Vue Element plus使用方法梳理
Dec 24 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 5.3.0 安装分析心得
2009/08/07 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
js tab 选项卡
2009/04/26 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
vue--vuex详解
2019/04/15 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Django 自定义分页器的实现代码
2019/11/24 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
python在不同条件下的输入与输出
2020/02/13 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
房产销售经理职责
2013/12/20 职场文书
房产代理公证处委托书
2014/04/04 职场文书
房屋买卖协议书
2014/04/10 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
影视后期实训报告
2014/11/05 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
监守自盗观后感
2015/06/10 职场文书
庆七一活动简报
2015/07/20 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python