技术栈
本我的项目采纳 Vue + ElementUI + Axios + Vue-Router + Vuex
ElementUI 篇
1. 为什么抉择 elementui
- 有大厂背书 : 尽管外围开发只有两三个人,但至多不必放心哪天就不保护,带着小姨子跑路了
- 2016 年 3 月 13 日 Element 悄悄诞生,经验了 4 年的风雨洗礼,咱们从一个饿了么外部业务组件库成长为 Vue 生态里最风行的 UI 组件库之一。
- 继续迭代 : Element 已取得 48200 Github Star,NPM 下载量 95 万次 / 每月的可喜成绩。超过 530 名社区贡献者的参加保护,一起实现了 4400 次 commit 的更新迭代。
- 生态圈优异,社区沉闷:其 contributors 曾经有 250 多人,社区里也有很多基于 element-ui 的拓展组件,也有很多相干的 qq 探讨群或者 gitter。
- 社区的认可: 目前 Element 曾经是 vue 相干最多 star 的开源我的项目了,体现出了社区对其的认可
2. 装置 npm
npm i element-ui -D
3. 引入 Element
- 残缺引入
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';
Vue.use(ElementUI);
new Vue({
el: '#app',
render: h => h(App)
});
- 按需引入,即只引入须要的组件(举荐)
import {
// element 组件
Message,
Form,
FormItem
} from 'element-ui'
let elemtuiArray = [
Message,
Form,
FormItem
]
elemtuiArray.forEach(item => {Vue.use(item)
})
Axios 篇
1. 为什么抉择 Axios
Axios 是一个基于 promise 的 HTTP 库,能够用在浏览器和 node.js 中
具备一下个性:
- 从浏览器中创立 XMLHttpRequests
- 从 node.js 创立 http 申请
- 反对 Promise API
- 拦挡申请和响应
- 转换申请数据和响应数据
- 勾销申请
- 主动转换 JSON 数据
- 客户端反对进攻 XSRF
2. Ajax 的毛病
- 自身是针对 MVC 编程,不合乎前端 MVVM 的浪潮
- 基于原生 XHR 开发,XHR 自身的架构不清晰,曾经有了 fetch 的代替计划,jquery 整个我的项目太大,单纯应用 ajax 却要引入整个 jquery 十分不合理(采取个性化打包计划又不能享受 cdn 服务)
- ajax 不反对浏览器的 back 按钮
- 平安问题 ajax 裸露了与服务器交互的细节
- 对搜索引擎的反对比拟弱
- 毁坏程序的异样机制
- 不容易调试
3. Fetch 的的毛病
- Fetch 合乎关注拆散,没有将输出、输入和用事件来跟踪的状态混淆在一个对象里
- fetchtch 只对网络申请报错,对 400,500 都当做胜利的申请,须要封装去解决
- fetch 默认不会带 cookie,须要增加配置项
- fetch 不反对 abort,不反对超时管制,应用 setTimeout 及 Promise.reject 的实现的超时管制并不能阻止申请过程持续在后盾运行,造成了量的节约
- fetch 没有方法原生监测申请的进度,而 XHR 能够。
装置插件
npm i axios –save-dev
新增 request 拦截器
- 新增文件 utils/request.js
import axios from 'axios'
import {Message} from 'element-ui'
import store from '@/store'
import {getToken} from '@/utils/auth'
// create an axios instance
const service = axios.create({
baseURL: '/api', // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
// let each request carry token
// ['X-Token'] is a custom headers key
// please modify it according to the actual situation
config.headers['X-Token'] = getToken()}
return config
},
error => {
// do something with request error
console.log('request error' + error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
// 此处依据需要解决异样
return response
},
error => {console.log('error====' + error.message) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
export default service
新增 api/api.js
export default {
// 验证管理员信息接口
validateAdminUsers: '/login/validateAdminUsers'
}
新增 api/index.js
import api from './api'
import request from '@/utils/request'
let inter = {
// 管理员信息申请接口
validateAdminUsers: data => {return request.post(api.validateAdminUsers, data)
}
}
export default inter
配置跨域需要 config/index.js
// 配置跨域申请
proxyTable: {
'/api': {
target: 申请的 url 地址,
changeOrigin: true,
pathRewrite: {'^/api': ''}
}
},
Vue-Router 篇
Vue Router 是 Vue.js 官网的路由管理器。它和 Vue.js 的外围深度集成,让构建单页面利用变得大海捞针。
对于路由治理的配置,小编会在独自的一篇博客中进行更新,敬请期待。
Vuex 篇
Vuex 是一个专为 Vue.js 利用程序开发的 状态管理模式。它采纳集中式存储管理利用的所有组件的状态,并以相应的规定保障状态以一种可预测的形式发生变化。
对于 Vuex 的配置阐明,小编会在独自的一篇博客中进行更新,敬请期待。
参考资料
- github: element
- element 官网文档
- vue-router
- vuex