命名视图
项目中会遇到同级显示多个视图而且不属于嵌套关系时,就会用到命名视图。这样可以在界面中使用多个单独命名的视图。如果没有设置名字的route-view
会默认为default
。一个视图使用一个组件进行渲染,对于同一个路由,多个视图就需要我们使用多个组件。
const router = createRouter({
history: createWebHashHistory(),
routes: [{
path: '/',
components: {
default: Tea,
warpp: Warpp
}
}]
})
我们在使用router-link时,会自动创建a标签,我们还可以使用router的实例方法来编写导航,这样想要导航到不同的url时,我们就可以使用push
方法。router实例调用push方法时会向history
增加一条。当用户点击浏览器进行回退时,就会回到之前的url地址。这个push方法也相当于router-link中加了to。push方法中的参数是可以是字符串路径也可以是位置描述符对象。带查询参数,使用query,/zss?plan=lyn
。使用hash
,结果/war#zjy
。push方法也是返回一个Promise
,可以等待导航完成以及知道结果是成功还是失败。除此之外,我们还可以使用replace
方法进行路由跳转。但是我们需要知道这个方法不会向history添加记录,而是将当前的history记录进行替换,在用法方面是一样的。forward
,back
,go
这些方法都可以被router的实例去调用。
router.push({ path: 'zss', query: { plan: 'lyn' } });
router.push({ path: '/war', hash: '#zjy' });
组件中如果使用$route
会导致与路由耦合,所以我们可以使用props
进行解耦来解决耦合的问题。我们在配置路由时,可以设置props
的值为true。然后就可以获取里面的值。当props
为一个对象时,我们原样设置后在静态的时候就体现出用处了。也可以设置一个props的返回函数,然后将参数转换为其他类型。还可以将静态值和路由值结合使用。history
模式下,我们需要注意一个问题,如果我们在浏览器地址栏输入地址或者把页面进行刷新时,这个时候解析的url会向服务器发送请求,如果没有对应的响应,就会出现404错误。但是在html5中,我们可以使用导航链接去路由页面,这样就不会发起http的请求也不会出现错误。我们使用时,需要在服务器上配置一个备用资源,这样当访问或者匹配不到任何资源时,就可以设置一个静态页面。而且node
服务器也支持html5的history模式。