Vue中 全局守卫

Vue 全局守卫

使用全局守卫简单举个例子 实现用户是否需要登陆

	<div id="app">
        <router-link to="home">首页</router-link>
        <router-link to="blog">我的博客</router-link>
        <!-- <a href="javascript:viod(0)">退出</a> -->
        <router-view></router-view>
    </div>

创建三个组件 首页、博客、登陆页面

 	var Home = {
        template: `<div>
                        我是首页
                    </div>`
    }
    var Blog = {
        template: `<div>
                        我是博客
                    </div>`
    }
    var Login = {
        data() {
            return {
                name: "",
                psd: ""
            }
        },
        template: `<div>
                        <input type="text" v-model="name"><br>
                        <input type="password" v-model="psd"><br>
                        <input type="button" value="登陆" @click="clickHandler">
                    </div>`,
        methods: {
            clickHandler() {
                var user = [{
                    name: this.name,
                    pass: this.psd
                }];
                // 登陆
                localStorage.setItem("user", JSON.stringify(user));
                // 数据存储王弼跳转博客页面
                // 编程时跳转
                //此时跳转值博客页面,但是该组件的auth属性值为true,
				//所以页面还在当前页面,需要在全局守卫中做判断
                this.$router.push({
                    name: "Blog"
                });
            }
        },
    }

将router挂载在原型上
Vue.use(VueRouter)

路由

	const router = new VueRouter({
        routes: [{
                path: "/",
                redirect: "/home",
            },
            {
                path: "/home",
                component: Home
            },
            {
                path: '/blog',
                name: "Blog",
                component: Blog,
                // meta:给未来路由做权限控制
                meta: {
                    //true: 证明该组件时需要登陆 
                    //false:表明用户已登录
                    auth: true
                }
            },
            {
                path: "/login",
                component: Login,
            }
        ]
    });

全局守卫

  	router.beforeEach((to, from, next) => {
        console.log(to);
        console.log(from);
        if (to.meta.auth) {
            // 用户点击博客,该用户需要登陆
            if (localStorage.getItem('user')) { 
                // 如果localStorage不为空,表示用户登陆完成
                // 直接放行
                next();
            } else {
                next({
                    path: "/login"
                })
            }

        } else {
            // 直接放行
            next(); //如果不调用页面会卡住
        }
    })
	new Vue({
        el: "#app",
        router,
    })
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值