如我们所知,为了对同一组件中的params更改作出反应,我们使用beforeRouteUpdate
挂钩或观看$route
。
观看$ route:
const User = {
template: '...',
watch: {
'$route' (to, from) {
// react to route changes...
}
}
}
beforeRouteUpdate方法:
const User = {
template: '...',
beforeRouteUpdate (to, from, next) {
// react to route changes...
next()
}
}
这两者有什么区别?如果两者相同,那么为什么vue路由器引入了beforeRouteUpdate
?
答案 0 :(得分:11)
来自beforeRouteUpdate
上的documentation:
在呈现此组件的路径发生更改时调用,但此组件在新路由中重用。例如,对于具有动态参数
/foo/:id
的路线,当我们在/foo/1
和/foo/2
之间导航时,将重复使用相同的Foo
组件实例,并且将调用此挂钩当发生这种情况时。
在 $route
对象的值实际发生变化之前,无法确定钩子是否被称为。这是导航钩子与在$route
上设置观察者之间的区别,在<{em> $route
的值发生变化后,它将被称为。
使用beforeRouteUpdate
导航防护,您可以确定是否要阻止路线更改(通过不调用next()
)或完全转到其他路线(通过不同的路线)价值如next('/foo')
,next({ name: 'foo' })
等。)
这是一个示例fiddle,显示何时调用这些函数。
答案 1 :(得分:0)
正如@thanksd所说,beforeRouteUpdate
就像守卫一样。通过观看,您无法阻止路线采取措施,但使用beforeRouteUpdate
,您可以使用next
功能进行操作。例如,您可以等待,直到您的数据被提取,然后继续到组件。
您可以在vue-router文档Data Fetching中找到更多信息。