编程式导航

除了使用 router-link 创建 a 标签来定义导航链接,

还可以,借助路由实例( router / this.$router )的实例方法,通过编写代码( 即,编程式导航 )来实现


  • router.push(location)  导航到不同的 URL

该方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL

声明式 编程式
<router-link :to="..."> router.push(...)
  • 该方法的参数,可以是一个字符串路径,或者一个描述地址的对象。例如:
# 字符串
  router.push('home')

# 对象
  router.push({ path: 'home' })

# 命名路由
  const username = 'webpiece'
  // 我们可以手动建立 url,但我们必须自己处理编码
  router.push(`/user/${username}`) // -> /user/webpiece
  // 同样
  router.push({ path: `/user/${username}` }) // -> /user/webpiece
  // (推荐) 如果可能的话,使用 `name` 和 `params` 从自动 URL 编码中获益
  router.push({ name: 'user', params: { username } }) // -> /user/webpiece
  // `params` 不能与 `path` 一起使用
  router.push({ path: '/user', params: { username } }) // -> /user

# 带查询参数,变成 /register?plan=private
  router.push({ path: 'register', query: { plan: 'private' }})

  • router.replace(location)  无痕浏览,替换当前位置

跟 router.push() 很像,唯一的不同就是,它不会向 history 添加新记录,而是替换掉当前的 history 记录

声明式                           编程式
<router-link :to="..." replace>     router.replace(...)

# 也可以直接在传递给 router.push 的 routeLocation 中增加一个属性 replace: true 
  router.push({ path: '/home', replace: true })
  // 相当于
  router.replace({ path: '/home' })

  • router.go(n)

参数 n 是一个整数,意思是:在 history 记录中,向前或者后退多少步,类似 window.history.go(n)

// 在浏览器记录中前进一步,等同于 history.forward()
   router.go(1)

// 后退一步记录,等同于 history.back()
   router.go(-1)

// 前进 3 步记录
   router.go(3)

// 如果 history 记录不够用,就静默失败
   router.go(-100)
   router.go(100)