Vue路由-编程式导航

除了通过属于声明式导航的<router-link>来实现页面切换,为了我们更方便地在项目中开发导航功能,Vue提供了编程式导航,也就是利用JavsScript代码来实现地址的跳转,通过router实例方法来实现。

1.router.push()

使用router.push()方法可以导航到不同的URL地址。

这个方法会向history栈添加一条新的记录,当用户单击浏览器后退按钮时,可以回到之前的URL。

在单击<router-link>时,router.push()方法会在内部调用,也就是说,单击”<route-link:to=’…’>” 等同于调用router.push(…)方法。

router.push()方法的参数可以是一个字符串路径,或者是一个描述路径的对象。

Vue
//获取router实例
var router = new VueRouter()
//字符串形式
router.push('user')
//对象形式
router.push({ path: '/login?url=' + this.$route.path })
//命名路由
router.path({ name: 'user', params: { userId: 123 } })
//带查询参数
router.push({ path: 'user', query: { id: '1' } })

在参数对象中,如果提供了path,params会被忽略,为了传参数,需要提供路由的name或者手写带有参数的path

Vue
//这里的params不生效
router.push({ path: 'user', query: { id: '1' } })
//params生效
const userId = '123'
router.push({ name: 'user', params: { userId } })
router.push({ path: '/user/${userId}' })
1.1query传参
Vue
 <div id="app">
    <button @click="goStart">跳转</button>
    <router-view />
  </div>
<template>
    <p>用户名:{{ this.$route.query.name }}</p>
</template>
import user from '@/components/user.vue'

Vue.use(Router)

export default new Router({

  routes: [
    { path: '/user', component: user }
  ]
})

export default {

  methods: {
    goStart() {
      this.$router.push({ path: '/user', query: { name: 'admin' } })
    }
  }
}
1.2 params传参
Vue
 <div id="app">
    <button @click="goStart">跳转</button>
    <router-view />
  </div>
export default new Router({

  routes: [
    { path: '/user', component: user, name: 'user' }
  ]
})
<script>

export default {

  methods: {
    goStart() {
      this.$router.push({ path: 'user', params: { name: 'admin' } })
    }
  }
}
</script>
2.router.replace()

route.replace()方法和router.push()方法类似,区别在于,为<router-link>设置replace属性后,当单击时,就会调用router.replace(),导航后不会向history栈添加新的记录,而是替换当前的history记录。

Vue
<!-- 声明式 -->
<router-link :to="{ path: 'user' }" replace></router-link>
//编程式
vueRoute.replace({ path: 'user' })
3.router.go()

router.go()方法的参数是一个整数,表示在histroy历史记录中前进或后退多少步,类似于window.history.go()。this.$router.go(-1)相当于history.back(),表示前进一步,功能类似于浏览器上的后退和前进按钮,相应的地址栏也会发生改变。

Vue
<template>
  <div id="app">
    <button @click="goBack">后退</button>
    <router-view />
  </div>
</template>

<script>
import VueRouter from 'vue-router';

var router = new VueRouter()
var vm = new Vue({
  el: '#app',
  methods: {
    goBack() {
      this.$router.go(-1)
    }
  },
  router
})
</script>
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部