美文网首页
04.动态路由(路由传参)、history模式(与带#的hash

04.动态路由(路由传参)、history模式(与带#的hash

作者: 小二的学习日记 | 来源:发表于2020-07-04 23:05 被阅读0次

    动态路由

    1.编写点击跳转页面的逻辑(编程式导航、传参)

    //===>src/views/Film/Nowplaying.vue
    <template>
      <div>
        nowplaying
        <ul>
          <li v-for="data in datalist" :key="data" @click="handleChangePage(data)">{{data}}</li>
        </ul>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          datalist: ["1111", "2222", "3333"]
        };
      },
      methods: {
        handleChangePage(id) {
          console.log(id);
          //编程式导航
          this.$router.push(`/detail/${id}`);
        }
      }
    };
    </script>
    

    2.编写detail页面的跳转规则

    //===>src/router/index.js
    ...
    import Detail from '@/views/Film/Detail'
    
    Vue.use(VueRouter)
    
    const routes = [
      {
        path: '/film',
       ...
        ]
      },
    ...
      {
        path: '/detail/:id',
        component: Detail
      },
     ...
    ]
    ...
    

    3.编写新的页面

    //===>src/views/Film/Detail.vue
    <template>
      <div>detail</div>
    </template>
    <script>
    export default {
      mounted() {
        console.log("要id获取详情信息", this.$route.params.id);
      }
    };
    </script>
    
    点击
    带参数的跳转

    history模式

    路由守卫

    全局守卫

    1.在路由文件配置全局守卫

    //===>src/router/index.js
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Home from '../views/Home.vue'
    import Film from '@/views/Film'
    import Cinema from '@/views/Cinema'
    import Center from '@/views/Center'
    import Login from '@/views/Login'
    import Nowplaying from '@/views/Film/Nowplaying'
    import Comingsoon from '@/views/Film/Comingsoon'
    import Detail from '@/views/Film/Detail'
    
    Vue.use(VueRouter)
    
    const auth = {
      isLogin() {
        return false
      }
    }
    
    const routes = [
      {
        path: '/film',
        component: Film,
        children: [
          {
            path: 'nowplaying',
            component: Nowplaying
          }, {
            path: 'comingsoon',
            component: Comingsoon
          }, {
            path: '',
            redirect: '/film/nowplaying'
          }
        ]
      },
      {
        path: '/cinema',
        component: Cinema
      },
      {
        path: '/detail/:id',
        name: 'kerwindetail',
        component: Detail
      },
      {
        path: '/center',
        component: Center
      },
      {
        path: '/login',
        component: Login
      },
      {
        path: '*',
        component: Film
      }
    ]
    
    const router = new VueRouter({
      mode: 'history',
      base: process.env.BASE_URL,
      routes
    })
    // 全局守卫
    router.beforeEach((to, from, next) => {
      console.log("盘查");
      if (to.path === '/center') {
        if (auth.isLogin()) {
          next()
        } else {
          next('/login')
        }
      } else {
        next()
      }
    })
    export default router
    

    2.编写Login组件

    //===>src/views/Login.vue
    <template>
        <div>
            Login
        </div>
    </template>
    
    image.png
    局部守卫

    1.注释掉全局守卫

    //===>src/router/index.js
    ...
    // 全局守卫
    // router.beforeEach((to, from, next) => {
    //   console.log("盘查");
    //   if (to.path === '/center') {
    //     if (auth.isLogin()) {
    //       next()
    //     } else {
    //       next('/login')
    //     }
    //   } else {
    //     next()
    //   }
    // })
    ...
    

    2.在Center页面编写局部守卫

    //===>src/views/Center.vue
    <template>
      <div>Center</div>
    </template>
    
    <script>
    export default {
      beforeRouteEnter(to, from, next) {
        console.log("局部盘查");
        if (false) {
          next();
        } else {
          next("/login");
        }
      }
    };
    </script>
    
    <style lang="sass" scoped>
    
    </style>
    

    运行结果和全局守卫一样。

    相关文章

      网友评论

          本文标题:04.动态路由(路由传参)、history模式(与带#的hash

          本文链接:https://www.haomeiwen.com/subject/jnjpqktx.html