Vue Router之多级路由

一、Vue Router 的多级路由实现。

1.改写路由配置,为需要添加多级路由的页面,添加children属性。

这里我们添加在Works 页面里的。

// 配置路由
const router = new VueRouter({
  routes:[
    {path:'/',component:Home},
    {path:'/works',component:Works,name:'WorksLink',
      //配置多级路由,在children数组里添加子路由信息
      children:[
        {path:'/work1',component:work1},
        {path:'/work2',component:work2},
        {path:'/work3',component:work3}
      ]
    },
    {path:'/about',component:About},
    {path:"*",redirect:'/'} //默认跳转
  ],
  mode:'history'
})

2.在Works组件中引用并创建跳转链接

<!-- 创建路由跳转 -->
        <ul>
            <li><router-link to="work1">Work1</router-link></li>
            <li><router-link to="work2">Work2</router-link></li>
            <li><router-link to="work3">Work3</router-link></li>
        </ul>
        <!-- 引用路由 -->
        <router-view></router-view>

此时点击链接进行跳转,结果:

注意红线处的地址!!!

此时我们的地址是采用 斜杠+地址 的形式。

当我们改写成 直接 地址 的形式,看一下会有什么区别。

// 配置路由
const router = new VueRouter({
  routes:[
    {path:'/',component:Home},
    {path:'/works',component:Works,name:'WorksLink',
      children:[
        {path:'work1',component:work1},
        {path:'work2',component:work2},
        {path:'work3',component:work3}
      ]
    },
    {path:'/about',component:About},
    {path:"*",redirect:'/'} //默认跳转
  ],
  mode:'history'
})

对应的组件中的跳转也需要改变

<!-- 创建路由跳转 -->
        <ul>
            <li><router-link to="/works/work1">Work1</router-link></li>
            <li><router-link to="/works/work2">Work2</router-link></li>
            <li><router-link to="/works/work3">Work3</router-link></li>
        </ul>
        <!-- 引用路由 -->
        <router-view></router-view>

观察结果:

一个是直接在根路径下跳转,

一个则是父组件的路径下。

具体喜欢哪一个,看自己,反正我觉得第二终好一点。

三级路由同理,继续在跳转的组件中添加children。。。

3.设置默认路由。

当我们跳到Works页面时,如图:

这里的没有内容,必须等我们点击Work1或works2,3才会显示出来。

解决方法:

在父路由添加属性  redirect :‘跳转地址’,

// 配置路由
const router = new VueRouter({
  routes:[
    {path:'/',component:Home},
    {path:'/works',component:Works,name:'WorksLink',
      redirect:'works/work1',//添加该属性
      children:[
        {path:'work1',component:work1},
        {path:'work2',component:work2},
        {path:'work3',component:work3}
      ]
    },
    {path:'/about',component:About},
    {path:"*",redirect:'/'} //默认跳转
  ],
  mode:'history'
})    

这样跳转到Works页面就会直接加载work1。

二、嵌套命名视图,了解一下。

现在我们想在Home中把Works中的三个works加载出来,通过路由。

实现方法:

// 配置路由
const router = new VueRouter({
  routes:[
    {path:'/',
    components:{ //嵌套命名,将component加s default为默认路由
      default:Home,
      theWork1:work1,
      theWork2:work2,
      theWork3:work3
    }},
    {path:'/works',component:Works,name:'WorksLink',redirect:'works/work1',
      children:[
        {path:'work1',component:work1},
        {path:'work2',component:work2},
        {path:'work3',component:work3}
      ]
    },
    {path:'/about',component:About},
    {path:"*",redirect:'/'} //默认跳转
  ],
  mode:'history'
})

这里我们在Home的子组件中进行引用:

却发现页面无法加载该引用!!!

<template>
    <div>
        <h1>Hello World</h1>
        <router-view name="theWork1"></router-view>
        <router-view name="theWork2"></router-view>
        <router-view name="theWork3"></router-view>
    </div>
</template>

但是在根组件app.vue中,可以。

原因:不明,如果你知道,请一定告诉我。

(官方文档也是一笔带过,无语...)

三、滚动行为

注意: 这个功能只在支持 history.pushState 的浏览器中可用。

具体还是看 官方文档 吧!

posted @ 2019-05-14 19:46  本该如此  阅读(16207)  评论(0编辑  收藏  举报