• vue-router嵌套路由,嵌套路径问题


    想要的效果是,A页面/screen-sit/home  ,B页面/screen-sit/***  都有个/screen-sit

    1>

    router.js

    import Vue from 'vue'
    // import {
    //     Message
    // } from 'element-ui'
    import VueRouter from 'vue-router'
    //解决vue路由重复的时候,点击报错问题
    // const originalReplace = VueRouter.prototype.replace
    // VueRouter.prototype.replace = function replace(location) {
    //     return originalReplace.call(this, location).catch(err => err)
    // }
    // const originalPush = VueRouter.prototype.push
    // VueRouter.prototype.push = function push(location) {
    //     return originalPush.call(this, location).catch(err => err)
    // }
    Vue.use(VueRouter)
    export const routes = [
        {
            path: "/",
            name: "login",
            component: () => import('@/views/login/index.vue')
        },
        {
            path: '/screen-sit',
            name: 's',
            //加上这段不触发跳转,而是直接打开子集合
            component:{
                render(c){
                    return c('router-view') 
                }
            },
            children: [
                {
                    path: '/screen-sit/home',
                    name: 'home',
                    component: () =>  import('@/views/home/two.vue'),
                },
                {
                    path: '/screen-sit/multi-prjs',
                    name: 'multi-prjs',
                    component: () =>  import('@/views/multiPrjs/layout/index.vue'),
                },
                {
                    path: '/screen-sit/single-design',
                    name: 'single-design',
                    component: () =>  import('@/views/singleDesign/layout/index.vue'),
                },
            ]
        },
        {
            path: '/404',
            name: '404',
            component: () =>
                import('@/views/error/404.vue')
        },
        {
            path: '/:pathMatch(.*)',
            redirect: '/404'
        }
    ]
    
    const router = new VueRouter({
        //mode:'history',
        mode: 'hash',
        base: process.env.BASE_URL,
        routes
    })
    
    export default router

    跳转页面

    <template>
      <div class="home-cont">
        <ul>
          <li
            v-for="(item, index) in list"
            :key="index"
            @click="ToBlack(item.path)"
          >
            {{ item.name }}
          </li>
        </ul>
      </div>
    </template>
    <script>
    //import AA from "@/components/AA";
    export default {
      //  components: { AA },
      props: {},
      data() {
        return {
          list: [
            {
              name: "项目集成管理智慧运营中心",
              path: "multi-prjs",
            },
            {
              name: "设计看板",
              path: "single-design",
            },
            {
              name: "开发看板",
            },
          ],
        };
      },
      computed: {},
      watch: {},
      created() {},
      mounted() {},
    
      destroyed() {},
      methods: {
        ToBlack(val) {
          console.log(val);
          this.$router.push({ name: val });
        },
      },
    };
    </script>
    <style lang="less" scoped>
    .home-cont {
      font-size: 26px;
      color: #fff;
      ul > li {
         30%;
        float: left;
        height: 300px;
    
        cursor: pointer;
      }
    }
    </style>

    总结:这种写法,跳转必须用name,不能用path,否则有bug

    2>

    {
            path: '/screen-sit',
            name: 's',
            //加上这段不触发跳转,而是直接打开子集合
            component:{
                render(c){
                    return c('router-view') 
                }
            },
            children: [
                {
                    path: 'home',
                    name: 'home',
                    component: () =>  import('@/views/home/two.vue'),
                },
                {
                    path: 'multi-prjs',
                    name: 'multi-prjs',
                    component: () =>  import('@/views/multiPrjs/layout/index.vue'),
                },
                {
                    path: 'single-design',
                    name: 'single-design',
                    component: () =>  import('@/views/singleDesign/layout/index.vue'),
                },
            ]
        },

    当children的path不带'/',就会自动跟父级路径

    this.$router.push({ name: "home" });就会跳转成http://10.100.14.104:8080/#/screen-sit/home

    要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。

  • 相关阅读:
    C# DataGridView 与 datatable 之间数据传递
    C# 调用命令行命令 net use
    C# 链接 sql server 数据库字符串
    winform窗口关闭,进程没有关掉的解决办法
    select 中的逻辑判断 sql server
    C#中的abstract 类和方法!!!
    c# ComboBox绑定枚举
    C#与C++类型互转
    DllImport
    TCP三次握手四次挥手详解
  • 原文地址:https://www.cnblogs.com/lsc-boke/p/15341633.html
Copyright © 2020-2023  润新知