使用Vue-router,使用命名路由比直接使用路径有什么优势吗?

Chr*_*ius 5 vue.js vue-router vuejs2

根据官方文档

有时,使用名称标识路线会更方便,尤其是在链接到路线或执行导航时。

那么,如何才能更方便呢?

<router-link :to="{ name: 'user', params: { id: user.id }}">
   {{ user.name }}
</router-link>
Run Code Online (Sandbox Code Playgroud)

对比

<router-link :to="'/user/' + user.id">
   {{ User.name }}
</router-link>
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些明显的东西。

Dec*_*oon 5

我总是使用命名路由。

优点是可以改变路由的路径,而无需在每次<router-link>this.$router.push()调用中改变路径。

这有点像在编程中我们避免使用魔法值而是使用命名常量的原因——我们可以在一个地方更改值,而无需在代码中查找并替换所有出现的值。

如果不使用命名路由,您的代码将与每个路由的路径紧密绑定,您无法更改一个而不需要更改另一个。命名路由使我们的代码独立于路由路径——无论路由的路径最终是什么,它都会工作。

另一个优点是我们可以利用嵌套路由的 param/query 继承——我们不需要重建完整路径,而是我们可以只传递子路由的名称,Vue 将使用任何现有的参数构建完整路径。

假设我们有以下路线:

{
  name: 'user',
  path: '/user/:id',
  children: [
    {
      name: 'profile',
      path: 'profile'
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

并且当前的路由路径是/user/1。要转到个人资料页面,我们需要执行以下任一操作:

this.$router.push({ name: 'profile' })
Run Code Online (Sandbox Code Playgroud)

或者

this.$router.push('/user/' + this.$route.params.id + '/profile')
Run Code Online (Sandbox Code Playgroud)

前者更简单,更不容易出错。