Vue-Router 源碼分析(七) VueRouter.push()的詳解


通過VueRouter實例的push()操作,可以進行路由跳轉,對於<router-link/>組件來說,它綁定的是click事件,最后也是通過執行push()方法來進行路由跳轉的。

對於push()方法來說,一共可以傳入三種形式的參數:

  • 字符串形式,值為路勁
  • 含有name的對象形式,可以搭配params屬性傳遞參數
  • 含有path的對象形式

舉個栗子:

<div id="app">
    <button @click="test">測試</button>   
    <hr/>
    <router-view></router-view>
</div>
<script>                   
    const info   = { template:'<div>Page info</div>'}             //登陸頁
    const home   = { template:'<div>Page home:{{this.$route.params.uid}}</div>'}            //主頁
    const detail = { template:'<div>Page detail:{{this.$route.params.id}}</div>'}         //詳情頁
    
    const router = new VueRouter({
        routes:[                                   
            {path:'/info',component:info},
            {path:'/home/:uid',component:home,name:'home'},
            {path:'/detail/:id',component:detail,}
        ]
    })
    const app = new Vue({                                                     
        el:'#app',
        data:{no:0},
        router:router,
        methods:{
            test(){
                this.no = this.no%3+1;
                switch(this.no){                         //點擊測試按鈕將依次跳轉到三個不同的組件,跳轉時使用的push參數也不同
                    case 1:
                        this.$router.push('/info')
                        break;
                    case 2:
                        this.$router.push({name:'home',params:{uid:10}})
                        break;
                    case 3:
                        this.$router.push({path:'/detail/15'})
                        break;
                }
            }
        }
    })
</script>

點擊按鈕時分別執行三個不同參數的push操作,如下:

我們執行push()進行路由跳轉時,會執行VueRouter源碼內History對象上的push()操作,然后會執行transitionTo()函數進行路由跳轉,在該函數內首先會執行normalizeLocation對參數做出修正,統一修正為一個對象,因此對於push('/login')和push({path:'/login'})來說是一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM