已配置好的vue全家桶项目router,vuex,api,axios,vue-ls,async/await,less下载即使用
github 地址: https://github.com/liangfengbo/vue-cli-project 点击进入
vue-cli-project
- 已构建配置好的vuejs全家桶项目,统一管理后端接口 | 获取数据 | 请求数据,已包含vue-router,vuex,api,axios. webpack, 储存用vue-ls, 异步async/await, css less. 下载即使用项目开发。
- 喜欢或对你有帮助的话请点star✨✨,Thanks.
A Vue.js project
使用
# 安装服务
npm install
# 启动服务
npm run dev
说明
src架构
├── App.vue
├── api
│ ├── doctor.js
│ └── fetch.js
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
├── libs
│ └── util.js
├── main.js
├── router
│ └── index.js
├── store
│ ├── index.js
│ ├── modules
│ └── mutation-types.js
└── views
└── doctor
处理数据页面这2大块,把数据和页面分离,在vuex里面做请求数据,页面只需要做调用数据。
请求接口这块再细分,接口和请求接口分开,我使用了最新的async/await函数做数据请求
api文件夹 主要放后端提供的接口,如
import fetch from './fetch';
export default {
// 获取医生列表
list(params) {
return fetch.get('/doctor/list', params)
},
// 获取医生详情信息
detail(id) {
return fetch.post('/doctor/detail/' + id);
},
}
fetch.js 文件是封装axios请求,以及请求处理,和http状态码的等处理
import Util from '../libs/util'
import qs from 'qs'
import Vue from 'vue'
Util.ajax.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest'
};
Util.ajax.interceptors.request.use(config => {
/**
* 在这里做loading ...
* @type {string}
*/
// 获取token
config.headers.common['Authorization'] = 'Bearer ' + Vue.ls.get("web-token");
return config
}, error => {
return Promise.reject(error)
});
Util.ajax.interceptors.response.use(response => {
/**
* 在这里做loading 关闭
*/
// 如果后端有新的token则重新缓存
let newToken = response.headers['new-token'];
if (newToken) {
Vue.ls.set("web-token", newToken);
}
return response;
}, error => {
let response = error.response;
if (response.status == 401) {
// 处理401错误
} else if (response.status == 403) {
// 处理403错误
} else if (response.status == 412) {
// 处理412错误
} else if (response.status == 413) {
// 处理413权限不足
}
return Promise.reject(response)
});
export default {
post(url, data) {
return Util.ajax({
method: 'post',
url: url,
data: qs.stringify(data),
timeout: 30000,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
})
},
get(url, params) {
return Util.ajax({
method: 'get',
url: url,
params,
})
},
delete(url, params) {
return Util.ajax({
method: 'delete',
url: url,
params
})
},
put(url, data) {
return Util.ajax({
method: 'put',
url: url,
data: qs.stringify(data),
timeout: 30000,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
})
}
}
在vuex里面做请求,比如请求医生列表,用async/await,拿到数据存进store数据里面
├── index.js
├── modules
│ └── doctor.js
└── mutation-types.js
import doctor from '../../api/doctor'
import * as types from '../mutation-types'
const state = {
// 医生列表
doctorList: [],
// 医生详情信息
doctorDetail: null,
};
const mutations = {
// 设置医生列表
[types.SET_DOCTOR_LIST](state, data) {
state.doctorList = data
},
// 设置医生详情信息
[types.SET_DOCTOR_DETAIL](state, data) {
state.doctorDetail = data
},
};
const actions = {
/**
* 获取医生顾问列表
* @param state
* @param commit
* @param params
* @returns {Promise<void>}
*/
async getDoctorList({state, commit}, params) {
let ret = await doctor.list(params);
commit(types.SET_DOCTOR_LIST, ret.data.data);
},
/**
* 获取医生详情信息
* @param state
* @param commit
* @param id 医生ID
* @returns {Promise<void>}
*/
async getDoctorDetail({state, commit}, id) {
let ret = await doctor.detail(id);
commit(types.SET_DOCTOR_DETAIL, ret.data.data);
}
};
export default {
state,
actions,
mutations
}
在页面里需要执行引入:
import {mapActions, mapState} from 'vuex'
代码可以具体看文件的代码
└── doctor
├── detail.vue
└── list.vue
<script>
import {mapActions, mapState} from 'vuex'
export default {
components: {},
data() {
return {}
},
computed: {
...mapState({
doctorList: state => state.doctor.doctorList,
})
},
async created() {
// 医生类型
let params = {type: 'EXP'};
// 获取医生列表
await this.getDoctorList(params);
},
methods: {
...mapActions([
// 获取医生列表
'getDoctorList'
]),
// 路由跳转方法
routeLink(link) {
this.$router.push({path: link});
},
}
}
</script>
核心就是把数据和页面分离,细分把接口,请求数据用vuex做处理,在页面获取数据都做统一管理项目。可以具体看项目里面的代码。
github 地址: https://github.com/liangfengbo/vue-cli-project 点击进入
已配置好的vue全家桶项目router,vuex,api,axios,vue-ls,async/await,less下载即使用的更多相关文章
- vue全家桶项目搭建(vue-cli 2.9.6+vue-router+vuex+axios)
一.安装vue-cli + vue-router + vuex + axios 1.安装vue-cli 2.创建项目 3.安装vuex和axios 二.搭建项目目录结构,如下所示: 1.assets目 ...
- vue全家桶项目应用断断续续的记录
一.引用axios插件报错 axios使用文档 Cannot read property 'protocol' of undefined 解决方法:在mainjs文件中把axios引入vue的原型函数 ...
- vue全家桶(vue2.x+vue-router+axios+webpack)项目搭建
参考博客文章 博主FungLeo的Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版 注:原博主写的非常详细 本文章为根据原博主教程总结的自己的搭建流程 一.安装n ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- 【实战】Vue全家桶(vue + axios + vue-router + vuex)搭建移动端H5项目
使用Vue全家桶开发移动端页面. 本博文默认已安装node.js. github链接 一.准备工作 安装vue npm install vue 安装脚手架vue-cli npm install -g ...
- 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- 使用vue全家桶制作博客网站
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...
- 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程
使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...
随机推荐
- HashMap 深入分析
/** *@author annegu *@date 2009-12-02 */ Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上 ...
- 【转载】解决nginx负载均衡的session共享问题
https://blog.csdn.net/u012081441/article/details/71787164 之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx sessio ...
- JavaScript对象添加、删除、修改对象的属性
https://www.cnblogs.com/goweb/p/5357640.html 利用动态特性 function Person(){}; var person = new Person(); ...
- JavaScript中将对象数组中的某个属性值,批量替换成另一个数值
原文链接 https://segmentfault.com/q/1010000010352622 希望将下列数组中的sh替换成沪,sz替换成深 var stooges = [ {label:1,val ...
- python常见模块之time,datetime模块
一.time模块 time模块提供了一些用于管理时间和日期. time模块中时间的表现形式有三种: format_string 格式化的字符串 struct_time 结构化时间 times ...
- Day6_正则表达式
用作匹配数据的方法: print(re.findall('\w','yangshuai 123 asd \n \t')) #w:匹配字母数字下划线 print(re.findall('\W','yan ...
- 移动 Web 的用户界面设计
http://www.ibm.com/developerworks/cn/mobile/wa-interface/index.html 简介 在创新者试图探索新的可能性的同时,新兴技术也在经历快速变化 ...
- Ocelot中文文档-配置
这里有一个配置的列子.其中有两个配置块.一个ReRoutes数组和一个GlobalConfiguration.ReRoutes配置块是一些告诉Ocelot如何处理上游请求的对象.Globalconfi ...
- ES入门笔一
ES6一共有6种声明变量的方法 --ES5只有var 和 function --ES6新增了let.const.import和class四种 ES6新增let和const,用来声明变量,是对var的扩 ...
- Beta项目总结
Beta冲刺成员名单和工作量比例 姓名 学号 负责内容 工作量比例 张梨贤 170327109 负责企业人员的委托/收回授权.第三方机构的委托授权管理.分级统计展示.分级列表展示 26% 黄腾飞 17 ...