分享一篇vue项目规范
最近 Vue 用的比较多,而且因为公司里有实习生,当几个人写一个项目的时候,会出现很多问题,最麻烦的就是规范不统一,之前我有一篇文章是说, vue 是比较有规范的一种框架了,但是也会出现很多问题,所以我今天写了一篇规范,也顺便拿出来分享一下
先说下我所使用的技术站:
"dependencies": {
"axios": "^0.17.1",
"element-ui": "^2.0.5",
"vue": "^2.5.2",
"vue-router": "^3.0.1",
"vuex": "^3.0.1"
}
一:关于 axios
1.axios 默认参数添加:
main.js:
axios.defaults.timeout = 5000;
// axios.defaults.baseURL = '/api';//默认全局前缀,build 后可以直接改动这里
//或者
axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? '/api' : ''
//拦截
axios.interceptors.response.use(
response => {
if(response.config.url === "/api/isRegisted"){
return response;
} //若框架是springBoot
if(response.data.code === 500) {
if (response.data.msg === '请先登录') {
router.push({
path: '/login',
query: {redirect: router.history.current.fullPath}
})
}
ElementUI.Message({
message: response.data.msg,
center: true,
type: 'warning'
}) return Promise.reject(response.data)
} // 若框架是springMVC
if (res.data && !res.data.success) {
if (res.data.code === '1004') {
router.push({
path: '/login',
query: {redirect: router.history.current.fullPath}
})
}
ElementUI.Message({
message: res.data.msg,
center: true,
type: 'warning'
})
return Promise.reject(res.data.error.message)
} if(response.data.code === 0){
return response;
}
},
error => {
return Promise.reject(error.response.data)
});
2.axios 挂载:
main.js:
Vue.prototype.axios = axios;
3.axios 封装:
main.js:
const get = (url,params)=>{
return new Promise((resolve, reject) => {
axios.get(url, {params:params})
.then(function (response) {
resolve(response.data);
}).catch(err=>{
reject(err)
})
})
};
const post = (url,params)=>{
return new Promise((resolve, reject) => {
axios.post(url, params)
.then(function (response) {
resolve(response.data)
}).catch(err=>{
reject(err)
})
})
};
Vue.prototype.$api = api;
Vue.prototype.$get = get;
Vue.prototype.$post = post;
在 .vue 页面可以直接使用 this.$get(url,params).then(res=>{}) 和 this.$post(url,params).then(res=>{})
不需要再加 catch;
如果需要对于 loading 动画有需求可以这样使用:
this.loading = true
this.$get(url,params).then(data=>{
this.list = data.page // 对于数据的操作
}).then(()=>{
this.loading = false
})
// 第二个 then 是不论 ajax 的结果是正常还是异常,都会触发 // 如若对于 catch 有需求则再添加 catch
如果仍然有其他特殊参数的请求 可以直接调用 this.axios.get();
使用 this.axios 时必须加上 catch
二. vuex
1.ajax 判断
首先 ajax 请求可以写在 actions也可以直接写在 .vue 页面里;
我们判断的依据是 回调是否需要调用页面结构来区分,
比如在 .vue 页面中 发送完请求后需要调用 this.$refs.element等,或者需要利用组件的独立性的效果时 的那就写在.vue页面,否则就写在 actions 里
3.ajax 调用
因为异步的原因,不能将 get,post挂载到 vuex 上面,
所以新增 fetch.js 页面:
import axios from 'axios'
import api from './index.js'//api页面
const get = (url,params)=>{
return new Promise((resolve, reject) => {
axios.get(url, {params:params})
.then(function (response) {
resolve(response.data);
}).catch(err=>{})
})
};
const post = (url,params)=>{
return new Promise((resolve, reject) => {
axios.post(url, params)
.then(function (response) {
resolve(response.data)
}).catch(err=>{})
})
};
export {api,get,post}; 在 vuex 页面中引入:import {api,get} from '@/api/fetch.js'
即可发起请求:
getUser({commit}){
get(api.info).then(data=>{
commit('changeUser',data)
})
} 如有特殊需要可以新引入 axios 或者在 fetch 上在进行特殊的添加
3.模块
按类型分类,将响应模块的state,mutations,actions等分别写在对应文件中,登录,注册,修改密码等写在index 中
三.路由
1.路由需登录
在创建路由时,添加的一个例子:
{
path: 'bar',
component: Bar,
meta: { requireLogin: true }
}
在需要登录的页面添加 meta:{ requireLogin: true } 这个元素
作用是在含有这个元素的页面是需要登陆后才能使用的;
起作用需要在 main.js 里设置
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requireLogin)) {
if ([判断登录信息]) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next()
}
})
关于详细的登录检验我都放置在了我的另一个博客中:http://www.cnblogs.com/Grewer/p/8440726.html
2.路由name;
路由都添加 name 字段,格式是路由格式的简化,采用驼峰命名,比如
{
path: '/foo/bar',
name:'fooBar',
component: Bar
}
四: api管理
1.新建src/api/index.js;
放置 api路径 要注意 axios已经有了前缀,所以这里的 api 值需要些前缀之后的路径
当路径较多时可以再多建几个文件,分类放置
2.挂载
在 main.js 里 import api from './api/index'
使用 Vue.prototype.$api = api 挂载到原型链上,
在 Vuex 里引入有 fetch页面了,这个页面已经将 api 引入了
我抽空写了一个简单的转换工具,可以简化 API 的编写:
https://www.npmjs.com/package/vueapimanage
github:https://github.com/Grewer/vueApiManage 欢迎 star
完;
分享一篇vue项目规范的更多相关文章
- 分享我在 vue 项目中关于 api 请求的一些实现及项目框架
本文主要简单分享以下四点 如何使用 axios 如何隔离配置 如何模拟数据 分享自己的项目框架 本文主要目的为以下三点 希望能够帮到一些人 希望能够得到一些建议 奉上一个使用Vue的模板框架 我只是把 ...
- 实现h5公众号分享功能(vue项目也适用)
在vue项目中我们先npm install weixin-js-sdk --save下载下来在main.js文件中引入 import wx from 'weixin-js-sdk';//引入 Vue. ...
- vue 项目规范
1, 组件化 2, css 分清单独和通用的 3, 封装请求 4, 命名原则 1: 尽量和后端保持一致 2: 简单常见的单词 3: 全部小写
- vue项目中使用bpmn-节点篇
前情提要 根据之前的操作,我们可以创建.导入.导出流程图,并对其进预览.通过此篇可以学到: 为节点添加点击.鼠标悬浮等事件 获取流程图内所有指定类型的节点 通过外部更新节点名字 获取节点实例的两种方法 ...
- vue项目中使用bpmn-番外篇(留言问题总结)
前情提要 “vue项目中使用bpmn-xxxx”系列的七篇文章在上周已经更新完成,发表后,有小伙伴在使用时提出了一些文章中没有讲到的问题,此篇作为番外篇,将大家提出的共性问题解答一下,欢迎大家支持原创 ...
- vue项目中使用bpmn-为节点添加颜色
内容概述 本系列 “vue项目中使用bpmn-xxxx” 分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意 ...
- vue项目中使用bpmn-自定义platter
前情提要 经过前四篇的学习,我们能够实现bpmn基本绘图.预览.为节点加事件加颜色等效果,这一篇我们来说,如何自定义左侧工具栏(platter),首先看一下自定义前后效果图对比: 我们本次要实现的目标 ...
- vue项目中使用bpmn-流程图xml文件中节点属性转json结构
内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项,具 ...
- [转]Vue项目全局配置微信分享思路详解
这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...
随机推荐
- 国内为什么没有好的 Stack Overflow 的模仿者?,因为素质太低?没有分享精神?
今天终于在下班前搞定一个技术问题,可以准时下班啦.当然又是通过StackOverflow找到的解决思路,所以下班路上和同事顺便聊起了它,两个资深老程序猿,还是有点感叹,中国的程序员群体人数应该不少,为 ...
- nginx的反向代理功能和缓存功能
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- python安装(python2.7)
1.下载python 进入官网下载安装 点击打开链接(官网地址:https://www.python.org/downloads/),进入官网后根据自己需求选择python2 或者 python3 2 ...
- canvas画布标签
最近良师益友整理一些canvas的资料,加强学习了解! 当你创建一个<canvas>元素后,就拥有了它的绘图上下文. 一.简单图形 1.getContext()方法 为了在canvas上绘 ...
- CentOS(linux发行版)系统安装中文输入法:
安装步骤: 1>.打开终端界面,使用su - root切换到超级用户,然后输入yum install"@Chinese support",回车. 2>.中间安装过程提示 ...
- 树莓派.使用Node.js控制GPIO
树莓派上的40个GPIO是最好玩的东西 它们可以被C,/C++, Python, Java等语言直接控制 现在就来看看怎么用Node.js做到同样的事情 在试验之前, 请先安装好Node.js, 具体 ...
- LeetCode 226. Invert Binary Tree (反转二叉树)
Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...
- 《mysql必知必会》读书笔记--安全管理及数据库维护
安全管理 mysql自带的mysql数据库中的user表可查看用户所有资料 创建用户帐号 CREATE USER ben IDENTIFIED BY 'p@$$wOrd' 重命名用户帐号 RENAME ...
- Linux_服务器_01_查看公网IP
在linux终端提示符下,输入以下命令: 精选: curl icanhazip.com/curl ifconfig.mecurl ipecho.net/plain 可以看到下图已经查询到公网IP地址了 ...
- 使用SQL Server2014作业定时执行无参的存储过程
一.存储过程 1.新建存储过程 按照下图找到存储过程,右键“新建”选择”存储过程” 此时在右侧会打开一个窗口,如下图. 2.填写创建存储过程语句 填写存储过程名称,因为是无参的存储过程,所以把参数部分 ...