0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

小程序框架頁面棧設(shè)計案例解析

電子工程師 ? 來源:博客園 ? 作者: 姜友瑤 ? 2020-11-04 13:55 ? 次閱讀

剛開始用小程序的時候沒怎么在意頁面的跳轉(zhuǎn),也沒仔細看文檔中說的頁面棧的內(nèi)容。只要能跳轉(zhuǎn)就行,wx.navigateTo,wx.redirectTo 這些方法一頓亂用。最后在做一個5層頁面的時候跳懵了。各種重復(fù)跳頁,怎么改都不好使,于是安心下來仔細看看API,發(fā)現(xiàn)這個路由還是有學(xué)問的。因此分享一下,希望對做小程序的網(wǎng)友也有一定的幫助。

頁面棧

首先我們要理解在小程序中頁面的路由是小程序框架本身控制的我們不要去手動管理, 小程序框架通過一個頁面棧的設(shè)計來管理所有的界面,為了便于理解你可以看一下示意圖。

?

如圖所示小程序的頁面棧最大能存放5個頁面,當(dāng)頁面棧中的頁面等于5時,在使用navigateTo這種方式是不能再跳頁的。

下面我們分析一下頁面棧的變化過程,從分析中,我們需要明白的一個重要問題就是,當(dāng)客戶按返回按鈕的時候究竟會跳轉(zhuǎn)到那個界面,這是我們分析頁面棧變化的的意義。

首先我們在頁面中調(diào)用兩次navigateTO,頁面棧情況如下

?

這時顯示的界面是pageC ,如果客戶在此時返回則會一切正常,回退的第一個界面是pageB,然后是pageA。但是如果在pageC 界面調(diào)用 wx.redirectTo({url:'pageD'}) 則情況就會不一樣看,我們先看一下跳轉(zhuǎn)到pageD后頁面棧的情況如何。

?

根據(jù)棧的情況,我們可以分析出。如果使用 wx.redirectTo跳轉(zhuǎn)到pageD頁面,然后在回退的時候是不能再次回退到pageC的,而會直接回退到pageB。

通過上面對頁面棧的分析,我們可以看到棧的變化是會影響客戶回退頁面的順序的,所以根據(jù)自己的需要合理的使用不同的跳轉(zhuǎn)方法是非常重要的。如果使用不當(dāng)就會導(dǎo)致跳轉(zhuǎn)混亂讓人摸不清頭腦

下面分析一種調(diào)轉(zhuǎn)重復(fù)頁面的情況

如果我們的pageB頁面是一個數(shù)據(jù)列表頁面,比如商品列表,pageC是一個商品的編輯界面,一般我們會通過pageB然后進如pageC對商品進行修改,修改后返回pageB。這是很常見的一個場景,但是如果使用不當(dāng)機會出現(xiàn)如下情況

?

如圖所示棧中出現(xiàn)了兩個相同的pageB界面,這個時候如果用戶按退出鍵就會出現(xiàn)一個頁面出現(xiàn)2次的情況,而且有一個界面的數(shù)據(jù)也是舊的數(shù)據(jù)。因此為了避免這個問題,我們應(yīng)該在 PageC 頁面避免將 PageB重復(fù)壓入棧中,所以在pageC頁面 使用wx.navigateBack({delta:1}); 進行頁面回退。而數(shù)據(jù)刷新的問題則在頁面的onShow函數(shù)中進行即可。

路由方法與頁面棧變化對應(yīng)關(guān)系


特別注意:

navigateTo,redirectTo只能打開非 tabBar 頁面。

switchTab只能打開 tabBar 頁面。

reLaunch可以打開任意頁面。

頁面底部的 tabBar 由頁面決定,即只要是定義為 tabBar 的頁面,底部都有 tabBar。

調(diào)用頁面路由帶的參數(shù)可以在目標(biāo)頁面的onLoad中獲取。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1509

    瀏覽量

    62263
  • 路由
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    41890
  • 小程序
    +關(guān)注

    關(guān)注

    1

    文章

    239

    瀏覽量

    12204
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用

    。 HMrouter:簡化頁面跳轉(zhuǎn)邏輯HMrouter是HarmonyOS NEXT出色的路由框架解決方案,專注于優(yōu)化應(yīng)用內(nèi)原生頁面跳轉(zhuǎn)邏輯,它封裝系統(tǒng) Navigation,集成
    發(fā)表于 01-02 18:00

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-應(yīng)用接續(xù)動態(tài)配置遷移按需遷移頁面

    按需遷移頁面,支持應(yīng)用動態(tài)選擇是否進行頁面恢復(fù)(默認進行頁面信息恢復(fù))。如果應(yīng)用不想使用系
    發(fā)表于 12-26 15:23

    AUTOSAR通信協(xié)議解析 如何實現(xiàn)AUTOSAR通信

    通信協(xié)議是一個復(fù)雜的系統(tǒng),它涵蓋了多種通信方式和模塊,以實現(xiàn)車內(nèi)ECU之間的高效、可靠的數(shù)據(jù)交換。以下是對AUTOSAR通信協(xié)議的解析及實現(xiàn)AUTOSAR通信的方法: 一、AUTOSAR通信協(xié)議解析
    的頭像 發(fā)表于 12-17 14:54 ?923次閱讀

    SSM框架的源碼解析與理解

    MVC模式,使得開發(fā)Web應(yīng)用程序變得更加高效和簡單。 1. Spring框架 基本功能: Spring是一個開源的Java平臺,它提供了全面的基礎(chǔ)設(shè)施支持,以便開發(fā)Java應(yīng)用程序。Spring
    的頭像 發(fā)表于 12-17 09:20 ?339次閱讀

    SSM框架在Java開發(fā)中的應(yīng)用 如何使用SSM進行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術(shù)。它通過分層架構(gòu),實現(xiàn)了視圖、控制、業(yè)務(wù)邏輯和數(shù)據(jù)訪問的分離,提高了代碼的可維護性和可擴展性
    的頭像 發(fā)表于 12-16 17:28 ?600次閱讀

    HarmonyOS Web頁面加載的原理和優(yōu)化方法

    在移動互聯(lián)網(wǎng)時代,應(yīng)用的頁面渲染速度對于用戶體驗至關(guān)重要。相對于原生頁面,Web頁面的性能存在多方面的技術(shù)挑戰(zhàn)。本文以HarmonyOS的ArkWeb組件為基礎(chǔ),介紹了Web頁面加載中
    的頭像 發(fā)表于 12-05 15:14 ?325次閱讀
    HarmonyOS Web<b class='flag-5'>頁面</b>加載的原理和優(yōu)化方法

    深度解析研華全式AI產(chǎn)品布局

    在人工智能邁向邊緣智能化的浪潮中,研華科技通過“Edge AI+生態(tài)協(xié)同”戰(zhàn)略推動AIoT 2.0時代的產(chǎn)業(yè)落地。本文專訪研華科技產(chǎn)品總監(jiān)邱柏儒,深度解析研華全式AI產(chǎn)品布局、差異化技術(shù)積累與生態(tài)共創(chuàng)實踐。
    的頭像 發(fā)表于 12-05 09:51 ?325次閱讀

    簡述大前端技術(shù)的渲染原理

    應(yīng)用開發(fā):Android、iOS、鴻蒙(HarmonyOS)等; ?Web前端框架:Vue、React、Angular等; ?小程序開發(fā):微信小程序、京東小程序、支付寶小
    的頭像 發(fā)表于 11-07 10:11 ?262次閱讀

    Linux網(wǎng)絡(luò)協(xié)議的實現(xiàn)

    網(wǎng)絡(luò)協(xié)議是操作系統(tǒng)核心的一個重要組成部分,負責(zé)管理網(wǎng)絡(luò)通信中的數(shù)據(jù)包處理。在 Linux 操作系統(tǒng)中,網(wǎng)絡(luò)協(xié)議(Network Stack)負責(zé)實現(xiàn) TCP/IP 協(xié)議簇,處理應(yīng)用程序發(fā)起的網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-10 09:51 ?355次閱讀
    Linux網(wǎng)絡(luò)協(xié)議<b class='flag-5'>棧</b>的實現(xiàn)

    Linux內(nèi)核中的頁面分配機制

    Linux內(nèi)核中是如何分配出頁面的,如果我們站在CPU的角度去看這個問題,CPU能分配出來的頁面是以物理頁面為單位的。也就是我們計算機中常講的分頁機制。本文就看下Linux內(nèi)核是如何管理,釋放和分配這些物理
    的頭像 發(fā)表于 08-07 15:51 ?331次閱讀
    Linux內(nèi)核中的<b class='flag-5'>頁面</b>分配機制

    鴻蒙開發(fā):【頁面及任務(wù)鏈】

    單個UIAbility組件可以實現(xiàn)多個頁面,并在多個頁面之間跳轉(zhuǎn),這種UIAbility組件內(nèi)部的頁面跳轉(zhuǎn)關(guān)系稱為“頁面”,由ArkUI
    的頭像 發(fā)表于 06-14 10:10 ?468次閱讀
    鴻蒙開發(fā):【<b class='flag-5'>頁面</b><b class='flag-5'>棧</b>及任務(wù)鏈】

    鴻蒙Ability Kit(程序框架服務(wù))【UIExtensionAbility】

    [UIExtensionAbility]是UI類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發(fā)者可以在UIAbility的頁面中通過
    的頭像 發(fā)表于 06-05 09:19 ?1458次閱讀
    鴻蒙Ability Kit(<b class='flag-5'>程序</b><b class='flag-5'>框架</b>服務(wù))【UIExtensionAbility】

    鴻蒙Ability Kit(程序框架服務(wù))【Ability內(nèi)頁面間的跳轉(zhuǎn)】

    基于Stage模型下的Ability開發(fā),實現(xiàn)Ability內(nèi)頁面間的跳轉(zhuǎn)和數(shù)據(jù)傳遞。
    的頭像 發(fā)表于 06-03 20:43 ?324次閱讀
    鴻蒙Ability Kit(<b class='flag-5'>程序</b><b class='flag-5'>框架</b>服務(wù))【Ability內(nèi)<b class='flag-5'>頁面</b>間的跳轉(zhuǎn)】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility內(nèi)和UIAbility間頁面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開發(fā),實現(xiàn)UIAbility內(nèi)和UIAbility間頁面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 06-03 14:13 ?802次閱讀
    鴻蒙Ability Kit(<b class='flag-5'>程序</b><b class='flag-5'>框架</b>服務(wù))【UIAbility內(nèi)和UIAbility間<b class='flag-5'>頁面</b>的跳轉(zhuǎn)】

    通信網(wǎng)絡(luò)協(xié)議之UDP協(xié)議技術(shù)解析

    在通常的網(wǎng)絡(luò)協(xié)議中,TCP/IP協(xié)議是一個常見的示例,其中UDP和TCP都是傳輸層協(xié)議。傳輸層負責(zé)提供端到端的數(shù)據(jù)傳輸服務(wù),它在網(wǎng)絡(luò)層(如IP協(xié)議)之上,為應(yīng)用層(如HTTP、DNS、FTP)提供可靠的數(shù)據(jù)傳輸。
    發(fā)表于 02-01 11:00 ?1065次閱讀
    通信網(wǎng)絡(luò)協(xié)議<b class='flag-5'>棧</b>之UDP協(xié)議技術(shù)<b class='flag-5'>解析</b>