Vue中meta的使用之权限控制

这个示例展示了如何使用Vue.js和Vue Router进行登录权限控制。用户输入用户名和密码后,信息存储在本地内存中,然后通过全局导航守卫检查登录状态,未登录用户会被重定向到登录页面,已登录用户可以访问博客内容。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>

  <script src="node_modules/vue/dist/vue.js"></script>
  <script src="node_modules/vue-router/dist/vue-router.js"></script>
  <script>
    Vue.use(VueRouter);
    var Login = {
      data() {
        return {
          name: '',
          pwd: ''
        }
      },
      template: `
        <div>
          <input type="text" v-model="name" />
          <input type="password" v-model="pwd" />
          <input type="button" value="登录" @click="loginHandler" />
        </div>
      `,
      methods: {
        loginHandler() {
          // 用户名、密码存储在本地内存中
          localStorage.setItem('user', {name: this.name, pwd: this.pwd});
          // 保存后跳转到博客页面
          // 编程式导航
          this.$router.push({
            name: 'blog'
          });
        }
      }
    }
    var Home = {
      template: `
        <div>首页内容</div>
      `
    };
    var Blog = {
      template: `
        <div>博客内容</div>
      `
    };
    var router = new VueRouter({
      routes: [
        {
          path: '/',
          redirect: '/home'
        },
        {
          path: '/home',
          component: Home
        },
        {
          path: '/blog',
          name: 'blog',
          component: Blog,
          // 权限控制:跳转到博客页面时验证是否已登录
          meta: {
            // true的时候是未登录状态
            requiresAuth: true
          }
        },
        {
          path: '/login',
          // name: 'login',
          component: Login
        }
      ]
    });
    // 全局导航守卫
    router.beforeEach((to, from, next)=>{
      console.log(to);
      console.log(from);
      if (to.meta.requiresAuth) {
        // 如果localStorage中有user,直接放行到blog
        if(localStorage.getItem('user')) {
          next();
        } else {
          next({
            path: '/login'
            // 或者使用命名路由
            // name: 'login'
          });
        }
      } else {
        // 放行
        next();
      }
    });
    var App = {
      template: `
        <div>
          <!-- 声明式导航 -->
          <router-link to="/home">首页</router-link>  
          <router-link to="/blog">博客</router-link>  
          <router-view></router-view>  
        </div>
      `
    }
    new Vue({
      el: '#app',
      template: `
        <App />
      `,
      components: {
        App
      },
      router
    });
  </script>
</body>
</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值