编程式导航
导航到不同的位置
除了使用 <router-link>
创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。
在 Vue 实例中,你可以通过 $router
访问路由实例。因此你可以调用 this.$router.push
。
该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| router.push('/users/eduardo')
router.push({ path: '/users/eduardo' })
router.push({ name: 'user', params: { username: 'eduardo' } })
router.push({ path: '/register', query: { plan: 'private' } })
router.push({ path: '/about', hash: '#team' })
|
如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path :
1 2 3 4 5 6 7 8 9
| const username = 'eduardo'
router.push(`/user/${username}`)
router.push({ path: `/user/${username}` })
router.push({ name: 'user', params: { username } })
router.push({ path: '/user', params: { username } })
|
替换当前位置router.replace()
它的作用类似于 router.push,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。
也可以直接在传递给 router.push
的 routeLocation
中增加一个属性 replace: true
:
1 2 3
| router.push({ path: '/home', replace: true })
router.replace({ path: '/home' })
|
命名视图
有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar (侧导航)
和 main (主内容)
两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default
1 2 3 4 5 6 7
| <router-view class="view left-sidebar" name="LeftSidebar"></router-view>
<router-view class="view main-content"></router-view>
<router-view class="view right-sidebar" name="RightSidebar"></router-view>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const router = createRouter({ history: createWebHashHistory(), routes: [ { path: '/', components: { default: Home, LeftSidebar, RightSidebar, }, }, ], })
|