uni-app 路由

小陳的筆記發表於2022-06-14

路由

uni-app頁面路由為框架統一管理,開發者需要在pages.json裡配置每個路由頁面的路徑和頁面樣式。類似的小程式在app.json中配置頁面路由相同。所以uni-app的路由用法與Vue Router不同,如仍希望採用Vue Router方式管理路由,可在外掛市場搜尋Vue-Router。

路由路由

uni-app有兩種頁面路由重定向方式:使用導航器元件擴充套件,呼叫API重定向。

頁面棧

框架以棧的形式管理當前所有頁面,當發生路由切換的時候,頁面棧的表現如下:

路由方式 頁面棧表現 觸發時機
初始化 新頁面入棧 uni-app:的第一個頁面
:新頁面 新頁面入棧 呼叫API   uni.navigateTo  ,使用元件   <navigator open-type =“ navigate” />
頁面重啟 當前頁面出棧,新頁面入棧 呼叫API   uni.redirectTo  ,使用元件  <navigator open-type =“ redirectTo” />
頁面返回 頁面不斷出棧,直到目標返回頁 呼叫API   uni.navigateBack   ,使用元件  <navigator open-type =“ navigateBack” />  ,使用者按左上角返回按鈕,安卓使用者點選物理後退鍵
標籤切換 頁面全部出棧,只留下新的標籤頁面 呼叫API   uni.switchTab   ,使用元件  <navigator open-type =“ switchTab” />   ,使用者切換Tab
重載入 頁面全部出棧,只留下新的頁面 呼叫API   uni.reLaunch   ,使用元件   <navigator open-type =“ reLaunch” />

執行環境判斷

開發環境和生產環境

uni-app可透過process.env.NODE_ENV判斷當前環境是開發環境還是生產環境。一般用於連線測試伺服器或生產伺服器的動態切換。

  • 在HBuilderX中,點選“執行”編譯出來的程式碼是開發環境,點選“發行”編譯出來的程式碼是生產環境
  • cli模式下,是通行的編譯環境處理方式。
if(process.env.NODE_ENV === 'development'){    
        console.log('開發環境')
}else{    
        console.log('生產環境')
}

如果你需要自定義更多環境,某種測試環境:

  • 假設只需要對單一平臺配置,可以的package.json中配置,在HBuilderX的執行和發行選單裡會多一個出來。
  • 如果是針對所有平臺配置,可以在VUE-config.js中配置。

快捷程式碼塊

HBuilderX中敲入程式碼塊uEnvDev,uEnvProd可以快速生成對應development,production的執行環境判定程式碼。

// uEnvDev
if (process.env.NODE_ENV === 'development') {    
        // TODO
  }
// uEnvProdif (process.env.NODE_ENV === 'production') {    
        // TODO
  }

判斷平臺

平臺判斷有2種場景,一種是在編譯期判斷,一種是在執行期判斷。

  • 編譯期判斷編譯期判斷,即條件編譯,不同平臺在編譯出包後已經是不同的程式碼。詳見:條件編譯
// #ifdef H5
    alert("只有h5平臺才有alert方法")
// #endif

如上程式碼只會編譯到H5的發行包裡,其他平臺的包不會包含如上程式碼。

  • 執行期診斷執行期判斷是指程式碼已經打入包中,仍然需要在執行期判斷平臺,此時可使用uni.getSystemInfoSync().platform判斷客戶端環境是Android,iOS還是小程式開發工具(在百度小程式開發工具,微信小程式開發工具,支付寶小程式開發工具中使用uni.getSystemInfoSync().platform返回值重置devtools)。
switch(uni.getSystemInfoSync().platform){
    case 'android':
        console.log('執行Android上')
        break;
    case 'ios':
        console.log('執行iOS上')
        break;
    default:
        console.log('執行在開發者工具上')
        break;
}

如有必要,也可以在條件編譯裡自己定義的一個變數,賦值。在後續執行程式碼中動態判斷環境。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018483/viewspace-2900381/,如需轉載,請註明出處,否則將追究法律責任。

相關文章