微信小程序使用navigator實(shí)現(xiàn)頁面跳轉(zhuǎn)功能
前言
在微信小程序開發(fā)中,navigator 用來實(shí)現(xiàn)頁面路由功能,比如 A頁面 中點(diǎn)擊頁面打開B頁面
1 navigator 默認(rèn)方式打開新的頁面
<navigator url="/pages/code1/navigator/bPage"> <text>打開B頁面</text> </navigator>
等效于
<navigator url="/pages/code1/navigator/bPage" open-type="navigate"> <text>打開B頁面</text> </navigator>
open-type 是指定了頁面跳轉(zhuǎn)的方式,默認(rèn)是 navigate ,頁面層疊方式如下
對應(yīng)的有點(diǎn)擊事件,在JS中打開頁面
<view bindtap="openNavigatorBPage" data-index='1'><text>打開B頁面</text></view>
在這里 data-index 是我頁面綁定的參數(shù),在對應(yīng)的方法中通過 currentTarget.dataset.index 方式獲取
如果我寫的是 data-id ,那么點(diǎn)擊事件中獲取方式為 currentTarget.dataset.id
openNavigatorBPage:function (options) { //獲取綁定的參數(shù) let id = options.currentTarget.dataset.index; wx.navigateTo({ url: '/pages/code1/navigator/bPage?id='+id, }) },
然后 在目標(biāo)頁面中的 onLoad 方法中可以獲取這個參數(shù)
onLoad: function (options) { let id = options.id; },
2 redirect 替換當(dāng)前頁面
open-type 可取值為 redirect ,就是直接替換當(dāng)前頁面
<!--類似a標(biāo)簽 open-type 跳轉(zhuǎn)方式--> <navigator url="/pages/code1/navigator/bPage" open-type="redirect"> <text>打開B頁面</text> </navigator>
對應(yīng)的 js 方法為
wx.redirectTo({ url: '/pages/code1/navigator/bPage?id='+id, })
3 reLaunch 重新加載當(dāng)前頁面
open-type 可取值為 reLaunch ,就是相當(dāng)于是重新加載了一下當(dāng)前頁面
<navigator url="/pages/code1/navigator/bPage" open-type="reLaunch"> <text>打開B頁面</text> </navigator>
對應(yīng)的 js 方法為
wx.reLaunch({ url: '/pages/code1/navigator/bPage?id='+id, })
4 navigateBack 關(guān)閉當(dāng)前頁面
可以直接在頁面中 使用 navigator 標(biāo)簽嵌套
<navigator open-type="navigateBack"> <text>關(guān)閉頁面</text> </navigator>
等效于
<view bindtap="closeBPage" data-index='1'> <text>關(guān)閉B頁面</text> </view>
closeBPage: function () { wx.navigateBack() },
5 navigateBack 關(guān)閉當(dāng)前頁面 并攜帶參數(shù)
A頁面通過wx.navigateTo跳入到B頁面,然后B頁面執(zhí)行wx.navigateBack返回到A頁面時候傳給A頁面參數(shù)
A頁面中定義接收
Page({ /** * 頁面的初始數(shù)據(jù) */ data: { param: undefined, }, /** * 生命周期函數(shù)--監(jiān)聽頁面顯示 */ onShow: function () { let param = this.data.param; if (param) { //有回傳參數(shù) 處理頁面業(yè)務(wù)邏輯 } }, ); //打開B頁面 openNavigatorBPage: function (options) { //獲取綁定的參數(shù) let id = options.currentTarget.dataset.index; wx.re({ url: '/pages/code1/navigator/bPage?id=' + id, }) },
在B頁面中,關(guān)閉B頁面的時候,設(shè)置回傳參數(shù)
closeBPage: function () { //getCurrentPages()函數(shù)是用來獲取當(dāng)前頁面棧的實(shí)例, //返回的是一個按棧的順序排列的數(shù)組pages_arr,且數(shù)組中的第一項(xiàng)為首頁,最后一項(xiàng)為當(dāng)前頁。 //獲取當(dāng)前頁面js里面的pages里的所有信息。 let pages = getCurrentPages(); //pages[pages.length - 2]是指的上一頁,然后獲取到上一個頁的page對象后直接執(zhí)行修改param的操作,這樣就實(shí)現(xiàn)了在B頁面修改A頁面數(shù)據(jù)的功能 let prevPage = pages[pages.length - 2]; prevPage.setData({ param: 111, // 設(shè)置需要傳遞的參數(shù) }) wx.navigateBack({ delta: 1 }) },
完畢
補(bǔ)充:解決微信小程序navigator點(diǎn)擊無法跳轉(zhuǎn)的問題
最近在搞微信小程序時發(fā)現(xiàn)頁面跳轉(zhuǎn)不成功,也沒有報(bào)錯,最后查了很多資料終于解決了問題,浪費(fèi)了很多時間,現(xiàn)將可能的原因和我的解決方案列出來供各位參考:
1、app.json里面是否配置了頁面,如果未配置,請?jiān)趐ages中添加。
2、跳轉(zhuǎn)路徑是否正確,盡量不要用相對路徑,使用絕對路徑’/pages/…’。
3、分清幾種跳轉(zhuǎn)的方式,特別是TabBar中要使用wx.switchTab。
4、(最坑的問題,我遇到的問題就是這個)如果之前在app.json中設(shè)置了TabBar并且其中l(wèi)ist中已有路徑,那么在其它地方就不能再使用,使用不報(bào)錯,但是也無效,不會發(fā)生跳轉(zhuǎn)。例如我在TabBar中的list中設(shè)置了一個pages/shoplist/shoplist路徑,而我想在index頁面中通過點(diǎn)擊一個navigator跳轉(zhuǎn)到/pages/shoplist/shoplist這個頁面,就不能進(jìn)行跳轉(zhuǎn).
發(fā)現(xiàn)無法跳轉(zhuǎn),并且也不報(bào)錯,就很奇怪
后來發(fā)現(xiàn)微信小程序開發(fā)中如果之前在app.json中設(shè)置了TabBar并且其中l(wèi)ist中已有路徑,那么在其它地方就不能再使用,使用不報(bào)錯,但是也無效,不會發(fā)生跳轉(zhuǎn)。
將tabbar下的pages/shoplist/shoplist路徑對應(yīng)的對象刪除之后,再在index頁面中點(diǎn)擊navigator,就可以跳轉(zhuǎn)到想要的頁面了
總結(jié)
到此這篇關(guān)于微信小程序使用navigator實(shí)現(xiàn)頁面跳轉(zhuǎn)功能的文章就介紹到這了,更多相關(guān)小程序navigator頁面跳轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Bootstrap table組件實(shí)現(xiàn)多層表頭的實(shí)例代碼
Bootstrap table還有一個很多強(qiáng)大的功能,下面就通過本文給大家分享基于Bootstrap table組件實(shí)現(xiàn)多層表頭的實(shí)例代碼,需要的朋友參考下吧2017-09-09JavaScript實(shí)現(xiàn)將Word文檔解析成瀏覽器認(rèn)識的HTML
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)將Word文檔解析成瀏覽器認(rèn)識的HTML,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-02-02基于勻速運(yùn)動的實(shí)例講解(側(cè)邊欄,淡入淡出)
下面小編就為大家?guī)硪黄趧蛩龠\(yùn)動的實(shí)例講解(側(cè)邊欄,淡入淡出)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10在服務(wù)端(Page.Write)調(diào)用自定義的JS方法詳解
自從[javascript]自定義MessageBox一文發(fā)布以后,很多網(wǎng)友都來信詢問,如何在服務(wù)端調(diào)用ShowInfo方法,周末休息想了個折中的辦法來實(shí)現(xiàn)2013-08-08通過flv.js播放監(jiān)控示例深入探究直播流技術(shù)
本文記錄一下在使用 flv.js 播放監(jiān)控視頻時踩過的各種各樣的坑,雖然官網(wǎng)給的?Getting Started?只有短短幾行代碼,跑一個能播視頻的 demo 很容易,但是播放時各種各樣的異常會搞到你懷疑人生,下面我將自己踩過的坑,以及踩坑過程中補(bǔ)充的相關(guān)知識,詳細(xì)總結(jié)一下2023-10-10input?獲取光標(biāo)位置設(shè)置光標(biāo)位置方案
這篇文章主要為大家介紹了input?獲取光標(biāo)位置設(shè)置光標(biāo)位置方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06bootstarp modal框居中顯示的實(shí)現(xiàn)代碼
這篇文章主要介紹了bootstarp modal框居中顯示的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-02-02