安装axios组件替换vue-resource,ajax交互
安装:
JavaScript Code复制内容到剪贴板
- npm install axios --save-dev
入口main.js:
JavaScript Code复制内容到剪贴板
- import axios from 'axios'
- Vue.prototype.$http = axios //将$http定义为axios组件,与vue-resourse组件使用方法一致
其他地方使用的话 如同使用 vue-resource 一样
JavaScript Code复制内容到剪贴板
- this.$http.get(URL).then(response => {
- // success callback
- }, response => {
- // error callback
- })
JavaScript Code复制内容到剪贴板
- // 传统写法
- this.$http.get('/someUrl', [options]).then(function(response){
- // 响应成功回调
- }, function(response){
- // 响应错误回调
- });
- // Lambda写法
- this.$http.get('/someUrl', [options]).then((response) => {
- // 响应成功回调
- }, (response) => {
- // 响应错误回调
- });
JavaScript Code复制内容到剪贴板
- <script>
- this.$indicator.open();
- let params = {
- intro: intro,
- publish_id: publishId,
- userId: userId
- };
- this.request.post('/cms/publish-success/', params).then(response => {
- this.$indicator.close(); //关闭loading
- let res = response.data;
- /* 进入业务流程 */
- if(res.code == 0) {
- let data = JSON.parse(res.data);
- // 进入发布成功界面
- this.$router.push('/cms/publish-success/' + publishId);
- } else {
- this.$toast("参数不正确");
- }
- // success callback
- }, response => {
- this.$indicator.close(); //关闭loading
- this.$toast("网络连接失败");
- })
- </script>
如果网络连接失败,建议返回上一页的路由或指定路由:
JavaScript Code复制内容到剪贴板
- <script>
- this.$indicator.open();
- let params = {
- intro: intro,
- publish_id: publishId,
- userId: userId
- };
- this.request.post('/cms/publish-success/', params).then(response => {
- this.$indicator.close(); //关闭loading
- let res = response.data;
- /* 进入业务流程 */
- if(res.code == 0) {
- let data = JSON.parse(res.data);
- // 进入发布成功界面
- this.$router.push('/cms/publish-success/' + publishId);
- } else {
- this.$toast("参数不正确");
- }
- // success callback
- }, response => {
- this.$indicator.close(); //关闭loading
- // this.$toast("网络连接失败");
- this.$messagebox({
- message: '网络连接失败',
- }).then(action => {
- this.$router.go(-1); //取消返回上一个路由地址
- });
- })
- </script>
对axios进行二次封装,用于统一处理错误:
参考资料:https://github.com/heuuLZP/vue-axios
在utils目录下新建一个文件:http.vue
解压以下,放进去,源码:
JavaScript Code复制内容到剪贴板
- <script>
- 'use strict'
- import axios from 'axios'
- import { MessageBox } from 'mint-ui'
- import { Indicator } from 'mint-ui';
- import router from '../router'
- axios.interceptors.request.use(config => {
- // loading
- return config
- }, error => {
- return Promise.reject(error)
- })
- axios.interceptors.response.use(response => {
- return response
- }, error => {
- return Promise.resolve(error.response)
- })
- /* 检查http码 */
- function checkStatus(response) {
- // loading
- // 如果http状态码正常,则直接返回数据
- if(response && (response.status === 200 || response.status === 304 || response.status === 400)) {
- return response
- // 如果不需要除了data之外的数据,可以直接 return response.data
- }
- // 异常状态下,把错误信息返回去
- return {
- status: -404,
- msg: '网络异常'
- }
- }
- function checkCode(res) {
- // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
- if(res.status === -404) {
- alert(res.msg)
- }
- let vm = this;
- // 判断返回参数规定的检测
- if(res.data.code != 0) {
- // console.log(res.data)
- MessageBox.confirm('', {
- title: '',
- message: res.msg ? res.msg : "数据异常,请联系管理员",
- confirmButtonText: '回首页',
- cancelButtonText: '返回'
- }).then(action => {
- router.push('/witsbox/witsbox-main');
- }).catch(err => {
- router.back(-1);
- });
- }else{
- return res.data
- }
- }
- export default {
- post(url, data) {
- Indicator.open();
- return axios({
- method: 'post',
- url,
- data,
- timeout: 10000,
- // headers: {
- // 'Token': '123'
- // }
- }).then(
- (response) => {
- Indicator.close();
- return checkStatus(response)
- }
- ).then(
- (res) => {
- Indicator.close();
- return checkCode(res)
- }
- )
- },
- get(url, params) {
- return axios({
- method: 'get',
- url,
- params, // get 请求时带的参数
- timeout: 10000,
- // headers: {
- // 'X-Requested-With': 'XMLHttpRequest'
- // }
- }).then(
- (response) => {
- return checkStatus(response)
- }
- ).then(
- (res) => {
- return checkCode(res)
- }
- )
- }
- }
- </script>
根据业务需求,解析即可,入口文件改一下:
main.js:
JavaScript Code复制内容到剪贴板
- import http from './utils/http'
- Vue.prototype.request = http
应用:
JavaScript Code复制内容到剪贴板
- this.request.post(this.$store.state.cms.api.getPublishList, params).then(response => {
- if(!response) {
- return false;
- }
- // 开始处理业务:
- let instance = this.$toast('删除成功');
- setTimeout(() => {
- instance.close();
- }, 1000);
- })
上一篇 利用npm 安装/卸载/删除模块
下一篇 mint-ui 手册