vue进阶

以下是自己在vue项目的开发与学习过程中,逐渐学会并使用的一些知识点,希望对刚入门vue的前端小伙伴们有一些帮助

———————————————————————分割线———————————————————————-

1.vue-router

在学会用router进行路由跳转后,那么应该知道如何通过路由守卫来进行跳转前的某些函数的执行,最常见的例子就是进行权限判断:

router.beforeEach((to, from, next) => {
    if(to.meta.requiresAuth) {
        let userInfo = window.localStorage.getItem('userId');
        if(!userInfo) {
            next({
                name: 'login',
                query: {
                    redirect: to.fullPath
                }
            })
        } else {
            //判断是否有token
            next();
        }

    } else {
        next();
    }
})

首先判断是否需要路由守卫,如果不需要,那么执行跳转,否则 验证登录信息;

vue-router 中的meta对象可配置许多属性用于权限判定,缓存判定等

2.vue-axios

axios可配置全局参数,包括 请求超时,请求头信息等

axios.defaults.timeout = 30000*10
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.withCredentials = true   //用于获取响应头信息,只有在非跨域状态下才会返回,否则返回默认表头信息

axios 可配置请求拦截器,响应拦截器,常用于配置交互信息,比如loading,message提醒等。

axios.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么
    loading = Loading.service({
        lock: true,
        text: '数据加载中',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    });
    return config;
}, function(error) {
    Message({
        type:'info',
        message:'发送请求超时,请刷新页面'
    })
    loading.close();
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function(response) {
    // 对响应数据做点什么
    loading.close();
    if(response.data.code!==0){
        Message({
            type:'info',
            message:response.data.msg
        })
    }
    return response;
}, function(error) {
        Message({
            type:'info',
            message:'服务器内部错误,请联系管理员'
        })
        loading.close();
    // 对响应错误做点什么
    Message({
        type:'info',
        message:'服务器内部错误,请联系管理员'
    })
    loading.close();
    return Promise.reject(error);
});

3.vue-vuex

对多模块的单页面vue项目而言,过多的数据会导致vuex文件过于庞大,因此可以通过modules对vuex文件进行切割

//  store/index.js
import auth from 'auth/store/index' //授权模块vuex
import client from 'client/store/index' //客户端管理模块vux
import system from 'system/store/index' //系统管理模块vuex
import message from 'message/store/index'   //消息管理模块vuex

const store = new Vuex.Store({
    mutations:{
        loginIn(state, options) {
            axios.post(`${httpUrl}/login`, qs.stringify({
                userName: options.form.username,
                password: SHA256(options.form.pwd)
            })).then((data) => {
                options.callback(data);
            })
        }
    },
    //引入模块vuex
    modules:{
        auth:auth, //权限管理
        client:client,  //client系统管理
        system: system, //sys系统管理
        message:message,//消息管理
    }
})

export default store;

// 各模块的vuex
export default {
    namespaced:true,  //定于查找域
    state:{},
    getters:{},
    mutations:{
        getData(state){},
        updateData(state){
            //如果需要使用store.commit('client/getData');记得要import store from 'vuex'; 
        }
    },
    actions:{}
}

//各模块下的.vue文件
//例如client模块下的.vue文件,需要通过mapState来映射数据:
...mapState('client', ['data1','data2','data3']),
//同理 映射函数
...mapMutations('client',['function1','function2'])

写在vuex里面的函数是没办法调用this的,比如我的数据请求都是放在vuex里面执行的,但是需要对返回状态进行判定然后把msg给提示出来,这里的话,我们可以通过定义callback回调函数进行操作

4.vue-mixins

mixins可以在不影响当前文件代码的情况下,对该模块的vue进行配置新的data对象,methods执行函数等

//需要添加mixins的文件
import {Account} from '@/test/js/index'
export default{
    mixins:[Account],
    data(){
        return {
            data:'test'
        }
    },
    methods:{
        testFun(){
        }
    }
}

// 将要导入的mixins文件
export const Account = {
    data:{
    return{
        }
    },
    methods:{
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值