zoukankan      html  css  js  c++  java
  • 导航守卫

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <router-view></router-view>
      </div>
    
      <script src="../vue.js"></script>
      <script src="../vue-router.js"></script>
    
      <script>
        /* 
          全局守卫  前置守卫
          router.beforeEach((to, from, next) => {
            to 我们要跳转的路由
            from 表示我们从哪个路由跳过来的
            next 守卫可以通过next控制下一步的跳转
              如果写next() 则表示直接跳转到to的位置
          })
        
          
          售票处指登录
          动物园 指需要登录才能进入的页面
          公园 指不需要登录就能进入的页面
    
    
          如果我们想要在路由对象上携带一些信息,那么我们可以使用meta
    
          {
            path: '/path',
            component: '组件',
            meta: {
              key: value
            }
          }
    
          通过meta我们可以给对应的路由中添加相关信息,以此来判断此路由是否需要验证
    
            if (to.meta.requireAuth) {
              // 需要验证
            }
    
          matched中包含了 自己本身路由对象及父路由和祖先路由的路由对象
        */
        const Index = {
          template: `
            <div>
              <h3>广场</h3>
              <router-link to="/zoo">动物园</router-link>
              <router-link to="/park">公园</router-link>
              <router-link to="/ticket">售票处</router-link>
            </div>
          `
        }
    
        const Zoo = {
          template: `
            <div>动物园
              <br>
              <router-view></router-view>  
            </div>
          `
        }
    
        const Ticket = {
          template: `
            <div>售票处
              <button @click="buy">买票</button>  
            </div>
          `,
          methods: {
            buy () {
              // 往localStorage中添加一个属性
              localStorage.setItem('ticket', 1)
            }
          }
        }
    
        const Park = {
          template: `
            <div>公园</div>
          `
        }
        
        const Tiger = {
          template: `
            <div>老虎</div>
          `
        }
    
        const routes = [
          {
            path: '/',
            component: Index
          }, {
            path: '/zoo',
            component: Zoo,
            meta: {
              // a: 1
              requireAuth: true
            },
            children: [
              {
                path: 'tiger', // /zoo/tiger
                component: Tiger,
                children: [
                  {
                    path: 'letterTiger'
                  }
                ]
              }
            ]
          }, {
            path: '/ticket',
            component: Ticket
          }, {
            path: '/park', 
            component: Park
          }
        ]
    
        const router = new VueRouter({
          routes
        })
    
        router.beforeEach((to, from, next) => {
          console.log(to)
    
          // next('/')
          /* if (to.path === "/") {
            next()
          } else {
            next('/')
          } */
          // 获取票
          const ticket = localStorage.getItem('ticket')
    
          // if (to.path === '/zoo' || to.path === '/zoo/tiger') {
          // if (to.meta.requireAuth) {
          // to.matched.some(route => route.meta.requireAuth)
          if (to.matched.some(route => route.meta.requireAuth)) {
            if (ticket) {
              next()
            } else {
              next('/ticket')
            }
          } else {
            next()
          }
        })
    
        const app = new Vue({
          el: '#app',
          router
        })
      
      </script>
    </body>
    </html>
  • 相关阅读:
    软件工程基础之二——阅读《软件工程基础》的问题
    软件工程基础之一——个人介绍与计划
    个人介绍
    sudoku
    GitHub地址
    疑问②
    概览提问①
    jsp内置对象
    tomcat的环境变量配置
    构造方法的重载代码
  • 原文地址:https://www.cnblogs.com/bao2333/p/10170676.html
Copyright © 2011-2022 走看看