Vue的基本使用

本文介绍了如何封装axios以简化请求配置、设置响应拦截器处理不同状态码,以及使用路由守卫确保登录状态,并展示了Vuex在状态管理和组件通信中的应用。
摘要由CSDN通过智能技术生成

一、axios封装

1.问题:

(1)每次请求都要写一下/ecard的路径(这里ecard是为了代理转发)

解决:在src下面建立一个util文件夹,建一个文件名为request.js,导入axios包,具体看代码

import axios from "axios";

// 创建axios请求对象
var http = axios.create({
    baseURL:"/ecard"
})
export default http

(2)服务器返回的状态码(200-成功,404,403,500.。。。)

解决:在服务器和客户端中间弄个拦截器,也是在request.js里面写

// 创建axios的响应拦截器
http.interceptors.response.use(res =>{
    if(res.data.code == 404){
        alert("请求找不到")
        return
    }
    if(res.data.code == 500){
        alert("服务器错误")
        return
    }
    return res.data//返回dto里面的内容
})

export default http

(3)在每个需要使用axios的地方时都需要import一下axios,这样子会很麻烦

解决:main.js是中心页,之前写的element的组件就是在main里面写的,所以axios也可以写在这里,而我们刚刚定义的request.js里面有axios,且需要返回的正确数据也在里面,所以我们可以直接导入刚刚写的request.js

//在main.js写
//这边$axios是我们自己定义的变量,为了跟axios好区分,所以加了$
import http from './util/request';
Vue.prototype.$axios = http;

 二、路由守卫

1.问题:

在没有登陆的情况下,也能访问其他不能访问的页面

正常流程:应该是登录后才能进入主界面

2.解决

每次进入一个路由的时候,我们都要判断他是否登录了,如果有就放行,如果没有就提醒用户登录

思考:怎么知道有没有登录呢?-------》目前使用本地储存

//登录成功则就把内容存进去本地里面
localStorage.setItem("userInfo",JSON.stringify(res.data))

 在路由类里面写

// 在你进入路由守卫之前拦截一下,全局的路由守卫
// to去哪  from从哪来  next要不要放行
router.beforeEach((to,from,next)=>{
    // 白名单,里面写路由,在这里面的路由都放行通过
    const whiteList = ['/login','/'];
    // 判断即将要进入的路由是否在白名单里面,在则放行,如果不在则提示请先登录
    // 找得到则就返回数组的下标,如果不在则返回-1
    if(whiteList.indexOf(to.path) != -1){
        next()
    }else{
        // 从localStorage里面取出userInfo,如果找得到则就放行,取不到就跳转登录界面
        var userInfo = localStorage.getItem('userInfo');
        if(userInfo != null){
            next();
        }else{
            alert("请先登录哦~")
        }
    }

})

export default router;

三、vuex组件

1.导入vuex---》npm i 依赖名称@版本号 -S

 2.使用

在src建一个store文件夹,里面建一个vuex的index.js,首先导入vuex,然后再让vue使用,所以也要导入Vue

// 写vuex
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

一些基本的使用:

// 通过vuex来开启仓库存一些数据
// 创建vuex状态管理器
const store = new Vuex.Store({
    state:{
        siteName:"传一一卡通"
    },
    getters:{
        getSiteName(state){
            return state.siteName
        },
    },
    // 同步改
    mutations:{
        // 两个参数,state你原来的数据,val是要修改的值
        changeSiteName(state,val){
            state.siteName = val;
        }
    },
    // 异步改
    actions:{
        // 可以做异步操作 ==》eg:axios
        setSiteName(store,val){
            setTimeout(function(){
                store.commit("changeSiteName",val)
            },2000)
        }
    }
})

export default store

调用:在LoginView.vue里使用

      <!-- <p>欢迎登录 -- {{this.$store.state.siteName}}</p> -->
      <p>欢迎登录 -- {{this.$store.getters.getSiteName}}</p>
 mounted(){
    // 当页面加载时就要进行修改
    //同步
    // this.$store.commit('changeSiteName',"e卡通")
    //异步
    this.$store.dispatch('setSiteName',"eeeeeee")
  },

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值