vue项目技术点总结,vue难点

后台项目总结:

一.封装localStorage

我的规范—在src下创建一个utils文件夹,专门存放封装的js文件

封装localStorage创建saveLocal.js,代码如下

let 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;

如何使用?

1.全局使用(vue文件中),mian.js文件引入

import storage from "@/utils/saveLocal.js";//localstorage保存数据   ---后缀名.js可以=省略,下面也是
Vue.prototype.$storage = storage;
//这里用的@代表在src为根目录

使用:

this.$storage.get('uid','1')//创建
this.$storage.get('uid')//获取
this.$storage.remove('uid')//移除

2.局部引入(vue文件中)

import Storage from "@/utils/saveLocal.js";//localstorage保存数据

使用:

Storage.get('uid','1')//创建
Storage.get('uid')//获取
Storage.remove('uid')//移除

3.局部引入(js文件中)和上面一致

import Storage from "@/utils/saveLocal.js";

使用:

Storage.get('uid','1')//创建
Storage.get('uid')//获取
Storage.remove('uid')//移除

二.封装接口 及请求拦截和响应拦截

我的规范—在src下创建一个api文件夹,专门存放封装的js文件

封装接口用data.js,封装请求和拦截用config.js,代码如下

首先看config.js

import axios from "axios";
import saveLocal from "@/utils/saveLocal";
import {
    
     Message } from 'element-ui';
import router from '@/router'
// 配置请求的根路径
// axios.defaults.baseURL = "/api";
axios.defaults.baseURL = "http://192.168.3.168:1210";
axios.defaults.timeout = 10000;
//用到cookie需要添加下面代码
// axios.defaults.withCredentials = true;
//请求拦截
axios.interceptors.request.use(
  config => {
    
    
    if (saveLocal.get("session")) {
    
    
        //判断是否有token,这里session是后台返回的一段字符串,和token一个理
        //如果有,请求的时候就加上
      config.headers['session'] = saveLocal.get("session")
        //上面是我这边后台要求加的方式
        //其他项目都是加到Authorization上
        //config.headers.Authorization = saveLocal.get("session");
    }
    return config;
  },
  error => {
    
    
    console.log(error, "接口出错了99000");
    return Promise.reject(error);
  }
);
// 响应拦截
axios.interceptors.response.use(
  config => {
    
    
    // console.log(config)
    if (config.data.code == 11004) {
    
    
      router.push('/login')
    }
    return config;
  },
  error => {
    
    
    Message.error('请重新登录')
    console.log(error, "接口出错了");
      //下面返回状态码需要看后台的状态码,来跳转,如token过期的之类的,让他去重新登录
    // const { status } = error.response
    // console.log(error.response)
    // if (status == 401) {
    
    
    //   // 页面跳转
    //   router.push('/login')
    // }
    return Promise.reject(error);
  }
);
//封装post方法
const HttpPost = function (url, params) {
    
    
  return axios.post(url, params, {
    
    
    headers: {
    
    
        //这个看项目需求加,看后台需要添加下面请求头
     // 'Content-Type': "application/json;charset=utf-8"
    }
  })};
    //1.封装get方法,不需要在调用时加参数情况如
    //定义
    //getNew() {
    
    
    // return //HttpGetN("/terminal_center/v1/data/last_sensor?//type=5");
    // },
    //调用
      //async  fun1(){
    
    
      //  let res=await this.$api.getNew()
       //}
  const HttpGet = function (url, param,
  ) {
    
    
    return axios.get(url, {
    
     params: param }, {
    
    
      headers: {
    
    
        // 'Content-Type': "application/json;charset=utf-8"
      }
    })
  };
  //2.封装get方法,在调用时需要参数情况如
    //定义
      // device_info(params) {
    
    
     //   return HttpGet("terminal_center/v1/data/device_info", params);
     // },
    //调用:
       //async  fun2(){
    
    
       //let  params={
    
    
         //   name:1,
        //    uid:1    
        //  }
        //  let res=await this.$api.device_info(params)
       //}
  const HttpGetN = function (url) {
    
    
    return axios.get(url, {
    
    
      headers: {
    
    
        // 'Content-Type': "application/json;charset=utf-8"
      }
    });
  };

export {
    
     HttpGet, HttpPost, HttpGetN };

在data.js里面引入请求方法

import {
    
     HttpGet, HttpPost, HttpGetN } from "./config";
let Api = {
    
    
  // 登录
  Login(params) {
    
    
    return HttpPost("/edge_service/v1/user_center/login", params);
  },
  getNew() {
    
    
    return HttpGetN("/terminal_center/v1/data/last_sensor?type=5");
  },
  device_info(params) {
    
    
    return HttpGet("terminal_center/v1/data/device_info", params);
  },
};
export default Api;

1.全局使用(vue文件中),mian.js文件引入,一般都是全局引入,局部引入(不建议,麻烦)

import api from "@/api/data.js"// 接口
Vue.prototype.$api = api;

使用:

    async login() {
    
    
      let params = {
    
    
        account: this.username.trim(),
        password: this.$md5(this.password.trim()).toUpperCase(),
      };
      let res = await this.$api.Login(params);//res表示响应回来的参数
        //是不是很方便,很happy
    },

三.过滤器的封装

老样子在src utils文件下 加filter.js文件

//格式
//export function xx(val){
    
    
//val 进行编辑,编辑成你需要的样子
//然后return 出去,就达到过滤效果
//return yy
//}
// 过滤时间格式为2020-08-31 12:03:50
//第一个过滤器   ---我这里val是以秒为单位  所以获取当前时间秒数为:Date.parse(new Date()) / 1000
export function timestampToTime(val) {
    
    
    var date = new Date(parseInt(val * 1000, 10));
    let Y = date.getFullYear();
    let M =
        date.getMonth() + 1 < 10
            ? "0" + (date.getMonth() + 1)
            : date.getMonth() + 1;
    let D = date.getDate();
    let h = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    let m =
        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    let s =
        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    return Y + "-" + M + "-" + D + " " + h + ":" + m + ":" + s;

};

全局引入—在main.js文件中

import * as filters from "@/utils/filters.js"; //全局挂载过滤器
Object.keys(filters).forEach(key => {
    
    
  Vue.filter(key, filters[key]);
});

调用

<p class="time">{
    
    {
    
     time | timestampToTime }}</p>
//tmie是变量  timestampTotime是过滤器里面定义的方法
//本例子是显示时间,而且函数在每隔一秒钟都能获取当前时间
export default {
    
    
  data() {
    
    
    return {
    
    
      time: Date.parse(new Date()) / 1000,
    };
  },
  mounted() {
    
    
    this.update();
  },
  methods: {
    
    
    update() {
    
    
      setTimeout(() => {
    
    
        this.time = Date.parse(new Date()) / 1000;
        this.update();
      }, 1000);
    },
  },
};

局部引入

import * as filters from "@/utils/filters.js";

调用

let tmie=filters.timestampToTime(item.timestamp).toString();
//item.timestamp是以秒为单位的时间戳
//如:1600910729  这里time结果2020-09-24 09:25:29

猜你喜欢

转载自blog.csdn.net/weixin_46476460/article/details/108775165