Vue路由导航(replace、push、forward、back、go)
先了解栈结构,再学习以下内容
- 栈的数据结构:先进后出,后进先出。
- 原理:push将元素压入栈内,pop将元素弹出,栈有分别有栈底指针和栈顶指针,指向栈内最低和最高的元素。
replace和push属性的原理
- 浏览器中的前进和后退的按钮也是使用了栈的数据结构实现,但也有不同。对于浏览器而言,分别有两种属性:
- push属性(推进):以叠加的方式进行入栈操作。
- replace属性(替换):以替换栈顶元素的方式进行入栈操作。
- 注意1:不管有没有使用其他属性的,浏览器默认添加push属性。(仅在声明式中使用,以下会讲。)
- 注意2:不管使用哪种属性进行操作,浏览器都不会删除原有的浏览记录,只会更改指针的指向。
replace和push属性的’声明式’路由导航和’编程式’路由导航
replace和push属性的’声明式’路由导航
- 注意事项:
- 不管有没有使用其他属性的,浏览器默认添加push属性,所以写不写push属性都会使用。(以下是replace属性)
- 声明式适合用于点击超链接转换路由的方式
- query和params都可以使用
- replace属性两种格式:
<router-link :replace="true">
和<router-link replace>
(简写)
<template><div><h2>A</h2><div><ul><li><!-- 声明式路由导航 --><router-link :replace="true" :to="{name : 'ac',params : {a1 : a[0],a2 : a[1],a3 : a[2]}}" >A1 Router-Link</router-link></li><li><router-link replace :to="{name : 'ad',params : {a1 : b[0],a2 : b[1],a3 : b[2]}}" >A2 Router-Link</router-link></li></ul></div><router-view></router-view></div>
</template><script>export default {name : 'A',data(){return{a : ['111', '222', '333'],b : ['444', '555', '666']}}}
</script>
replace和push属性的’编程式’路由导航
- 注意事项:
- 编程式适合用于点击按钮转换路由的方式
- 编程式跟声明式不同,编程式可以使用相关的API来完成
- query和params都可以使用
// push属性的格式
// $router:多组件共享的路由器对象。
this.$router.push({name : '',query or params : {}
}, ()=>{}, ()=>{})
// replace属性的格式
// $router:多组件共享的路由器对象。
this.$router.replace({name : '',query or params : {}
}, ()=>{}, ()=>{})
- 解释
()=>{}, ()=>{}
-
不使用
()=>{}, ()=>{}
的情况:在编程式反复执行push和replace属性浏览器控制台会出现以下图片情况 -
原因:在使用push和replace属性时,会传递两个回调函数,一个是成功回调,一个是失败回调。如果没有传递回调函数,则就会出现报错的情况,在后面加上
()=>{}, ()=>{}
就好了。
-
<template><div><h2>A</h2><div><ul><li><button @click="goA1">A1 Button</button></li><li><button @click="goA2">A2 Button</button></li></ul></div><router-view></router-view></div>
</template><script>export default {name : 'A',data(){return{a : ['111', '222', '333'],b : ['444', '555', '666']}},methods : {goA1(){// 编程式路由导航// $router:多组件共享的路由器对象。this.$router.push({name : 'ac',params : {a1 : this.a[0],a2 : this.a[1],a3 : this.a[2]}}, ()=>{}, ()=>{})},goA2(){this.$router.replace({name : 'ad',params : {a1 : this.b[0],a2 : this.b[1],a3 : this.b[2]}}, ()=>{}, ()=>{})}}}
</script>
forward、back和go的’编程式’路由导航
- forward:前进,
this.$router.forward()
- back:后退,
this.$router.back()
- go:前进几步、后退几步,
this.$router.go()
- 括号内为正数表示前进,负数表示后退,数字表示几步
// App.vue
<template><div><button @click="forward">前进</button><button @click="back">后退</button><button @click="forwardFive">前进5步</button><button @click="backFive">后退5步</button></div>
</template><script>export default {name : 'App',methods : {forward(){this.$router.forward()},back(){this.$router.back()},forwardTwo(){this.$router.go(5)},backTwo(){this.$router.go(-5)}}}
</script>
k()},forwardTwo(){this.$router.go(5)},backTwo(){this.$router.go(-5)}}}
</script>