记,第一个独立完成的项目Q

问题如下

  1. 根据接口请求地址变更需求
    因为想要打包后也可以在服务端直接修改请求接口的地址,所以在public文件夹下新建config.js(public文件存储静态资源的,放在public目录下的资源会被直接复制,不会经过webpack的打包处理)
//将变量直接挂载到 window 上
window.Global = {
    baseURL: 'http://xxxxx',
    // baseURL: 'http://xxxxx',
}

之后在index.html中引用

 <script src="./static/js/config.js" type="text/javascript"></script>

在整个项目中就可以直接通过 window.Global.baseURL 取到

2.将axios请求封装一下

//在这里配置axios实例,可以新建多个来请求不同域名
const service = axios.create({}
import axios from 'axios'
import { Message,Loading} from 'element-ui';
import router from "../router"

const service = axios.create({
  baseURL: window.Global.baseURL,	//请求地址,使用的config.js定义的地址
  timeout: 3 * 10000	//响应超时
})

//为项目中统一配置页面加载loading定义一个变量
let loadingInstance

// 2.请求拦截器
service.interceptors.request.use(config => {
   config.data = JSON.stringify(config.data); //数据转化
   config.headers = {
     'Content-Type':'application/json ' 
   }
   //请求接口数据时,需要loading
  loadingInstance = Loading.service({ text: "请稍等...",background: 'rgba(0, 0, 0, 0.8)',fullscreen: true })
  return config
}, error => {
	//请求出错,显示错误信息并关闭loading
  loadingInstance.close()
  Promise.reject(error)
})

// 3.响应拦截器
service.interceptors.response.use(response => {
  //接收到响应数据并成功后的一些共有的处理,关闭loading等 
  if (loadingInstance) {
    loadingInstance.close()
  }
  return response
}, error => {
  loadingInstance.close()
  //以下是对返回不同代码进行的相应提示,举个例子显示
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        Message({
            message: "错误请求",
            type: "error"
        });
        break;
      default:
        Message({
            message: `连接错误${error.response.status}`,
            type: "error"
        });
    }
  } else {
    if (JSON.stringify(error).includes('timeout')) {
      Message({
        message: "服务器响应超时,请刷新当前页",
        type: "error"
      });
    }
    Message({
        message: "连接服务器失败",
        type: "error"
    });
  }
  Message.error(error.message)
  return Promise.resolve(error.response)
})
export default service	//给一个出口用来导出

3.使用localStorage暂存用户信息

起初只是在一个页面用到,所以只在一个模块页面 import 进 js
后面有需求需要每个页面都要获取当前用户信息,就在 main.js 引入后使用,挂载到vue的原型上

localStorage.js

var storage={
    set(key,value){
        localStorage.setItem(key,JSON.stringify(value));
    },
    get(key){
        return JSON.parse(localStorage.getItem(key));
    },
    remove(key){
        localStorage.removeItem(key);
    } 
}
export default storage;

main.js

import storage from './utils/localstorage'
Vue.prototype.storage = storage
随即在各个页面中就可以通过	this.storage	使用
this.storage.set("user", res.data);
let user = this.storage.get("user");

4.select框选中但是页面没有更新多选框的选中状态

页面上显示的内容未更新,此时就可以使用$forceUpdate强制更新下

if (val.isCheck == true) {
    this.checkList.push(val.OID);
    this.$forceUpdate();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值