**什么是路由?**
> 路由(routing)是指分組從源到目的地時(shí),決定端到端路徑的網(wǎng)絡(luò)范圍的進(jìn)程。我們可以理解微信小程序頁(yè)面路由,根據(jù)路由規(guī)則(路徑)從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面的的規(guī)則。
## **一、哪些會(huì)觸發(fā)頁(yè)面跳轉(zhuǎn)**
1. 小程序啟動(dòng),初始化第一個(gè)頁(yè)面
2. 跳轉(zhuǎn)新頁(yè)面,調(diào)用`wx.navigateTo `或者 `<navigator />`
3. 頁(yè)面重定向,調(diào)用`wx.redirectTo` 或者 `<navigator />`
4. 頁(yè)面返回,調(diào)用`wx.navigateBack `,頁(yè)面左上角返回按鈕
5. `wx.switchTab`實(shí)現(xiàn)`tabBar`頁(yè)面切換
> **Tips:** *所有頁(yè)面都必須在app.json中注冊(cè),例如*
```json
{
"pages": [
"pages/index/index",
"pages/classification/classification",
"pages/start/start",
"pages/detail/detail",
]
}
```
## **二、微信小程序中實(shí)現(xiàn)頁(yè)面路由的幾種方式**
1. `wx.navigateTo`,保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面,但是不能跳到 tabbar 頁(yè)面
```json
wx.navigateTo({
url: 'pages/detail/detail',
success: function(res) {},
...
})
```
1. `wx.redirectTo`,關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面,但是不允許跳轉(zhuǎn)到 tabbar 頁(yè)面
```json
wx.redirectTo({
url: 'pages/detail/detail',
success:function(res){},
...
})
```
1. `<navigator />`組件跳轉(zhuǎn)方式
```json
<navigator url=pages/detail/detail">跳轉(zhuǎn)</navigator>
```
1. `wx.navigateBack`返回上一頁(yè)
```json
wx.navigateBack({
delta: 1,
})
```
> **Tips:** *delta為1時(shí)表示返回上一頁(yè),為2時(shí)表示上上一頁(yè),以此類(lèi)推;如果dalta大于已打開(kāi)的頁(yè)面總數(shù),則返回到首頁(yè)。返回后,元界面會(huì)銷(xiāo)毀*
1. `wx.switchTab`跳轉(zhuǎn)到 tabBar 頁(yè)面,并關(guān)閉其他所有非 tabBar 頁(yè)面app.json:
```json
{
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首頁(yè)",
},
{
"pagePath": "pages/car/car",
"text": "購(gòu)物車(chē)",
},
...
}
}
```
index.js:
```json
wx.switchTab({
url: 'pages/car/car'
})
```
## **三、小程序路由實(shí)現(xiàn)原理**
小程序路由是通過(guò)自己實(shí)現(xiàn)的一個(gè)棧(先進(jìn)先出)來(lái)管理的。
當(dāng)我們通過(guò)`wx.navigateTo`或者`<navigator/>`從A頁(yè)面跳轉(zhuǎn)到B頁(yè)面時(shí)。路由棧的變化是這樣的。
路由棧剛開(kāi)始只存有頁(yè)面A,當(dāng)使用`wx.navigateTo`跳轉(zhuǎn)后,頁(yè)面B推入路由棧并展示到界面上,頁(yè)面A隱藏。
當(dāng)我們使用`wx.navigateBack`返回時(shí)
那么`wx.redirectTo`與`wx.navigateTo`有什么區(qū)別呢?
假如當(dāng)前已經(jīng)在二級(jí)頁(yè)面B上,我們使用`wx.redirectTo`跳轉(zhuǎn)到C頁(yè)面,其過(guò)程是這樣的。
頁(yè)面B會(huì)被pop出,然后C頁(yè)面再push進(jìn)入棧,這個(gè)時(shí)候棧中還是只有兩個(gè)頁(yè)面。
**- End -**
更多關(guān)于web培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。