uniapp中uni.navigateBack返回后刷新頁(yè)面數(shù)據(jù)的實(shí)現(xiàn)
一、前言
在移動(dòng)端中,數(shù)據(jù)列表中某項(xiàng)數(shù)據(jù)點(diǎn)擊編輯,進(jìn)入下一個(gè)頁(yè)面編輯數(shù)據(jù),保存后回退到數(shù)據(jù)列表頁(yè),此時(shí)需要刷新列表數(shù)據(jù),否則顯示的列表數(shù)據(jù)還是舊的。這種場(chǎng)景感覺(jué)很多地方都有出現(xiàn),是需要詳細(xì)說(shuō)說(shuō)方法,也就是uniapp
中uni.navigateBack
返回后刷新頁(yè)面數(shù)據(jù)。
1.1、uni.navigateBack
二、方法
2.1、父頁(yè)面設(shè)置鉤子函數(shù)onBackPress
詳細(xì)文檔可點(diǎn)擊【跳轉(zhuǎn)】,適用于刷新多處數(shù)據(jù)
export default { onBackPress(options) { this.refreshData(); }, methods:{ refreshData: function() { //加載數(shù)據(jù) } } }
2.2、uni.$emit和uni.$on監(jiān)聽(tīng)通知數(shù)據(jù)變更
2.2.1、子頁(yè)面
子頁(yè)面在需要返回上一頁(yè)面的地方寫入uni.navigateBack
,然后在success
回調(diào)中uni.$emit
發(fā)送數(shù)據(jù)更新通知
uni.navigateBack({ delta: 1, // 返回層數(shù),2則上上頁(yè) success() { uni.$emit('update',{msg:'頁(yè)面更新'}) } })
2.2.2、父頁(yè)面
父頁(yè)面在初始化時(shí)uni.$on
監(jiān)聽(tīng)數(shù)據(jù)更新,在回調(diào)函數(shù)中處理數(shù)據(jù)。在頁(yè)面銷毀時(shí)移除監(jiān)聽(tīng)
export default { mounted() { uni.$on('update', function(data) { //觸發(fā)更新后 }) }, //為了優(yōu)化代碼,可以加上移除事件,避免重復(fù)監(jiān)聽(tīng)事件 onUnload() { // 移除監(jiān)聽(tīng)事件 uni.$off('update'); } }
2.3、onShow鉤子函數(shù)處理數(shù)據(jù)
2.3.1、子頁(yè)面
準(zhǔn)備回退到上一頁(yè)之前,將上一頁(yè)的是否刷新參數(shù)值改為是的狀態(tài)
let pages = getCurrentPages(); let prevPage = pages[pages.length - 2]; // 上一個(gè)頁(yè)面 // 直接調(diào)用上一個(gè)頁(yè)面的setData()方法,把數(shù)據(jù)存到上一個(gè)頁(yè)面中去 prevPage.setData({ isRefresh: 1 }) // 再根據(jù)需求,確定返回上一頁(yè)面 uni.navigateBack({ delta: 1 })
2.3.2、父頁(yè)面
在onShow鉤子函數(shù)中獲取判斷條件
export default{ data() { return{ isRefresh:false } }, onShow() { // 如果是提交狀態(tài)返回isRefresh=1,才刷新頁(yè)面,從詳情過(guò)來(lái)無(wú)需刷新 let pages = getCurrentPages(); let currPage = pages[pages.length - 1]; if(currPage.__data__.isRefresh) { // 重新獲取數(shù)據(jù) this.getData(true)//獲取列表數(shù)據(jù) // 每一次需要清除,否則會(huì)參數(shù)會(huì)緩存 currPage.__data__.isRefresh=false } } }
2.4、注意
如果出現(xiàn)數(shù)據(jù)沒(méi)有更新,可以使用$forceUpdate
或者先置空數(shù)據(jù)再賦值數(shù)據(jù),大概率是數(shù)據(jù)沒(méi)有響應(yīng)
最后
到此這篇關(guān)于uniapp中uni.navigateBack返回后刷新頁(yè)面數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)uniapp uni.navigateBack返回刷新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS設(shè)計(jì)模式之訪問(wèn)者模式的用法詳解
JS訪問(wèn)者模式是一種行為型設(shè)計(jì)模式,用于將算法與對(duì)象結(jié)構(gòu)分離, 該模式允許你定義新的操作(訪問(wèn)者)而無(wú)需修改現(xiàn)有對(duì)象結(jié)構(gòu)(被訪問(wèn)者), 通過(guò)這種方式,你可以在不改變對(duì)象結(jié)構(gòu)的情況下添加新的操作,本文就給大家詳細(xì)的講講JS訪問(wèn)者模式的用法2023-08-08跟我學(xué)習(xí)javascript的函數(shù)和函數(shù)表達(dá)式
跟我學(xué)習(xí)javascript的函數(shù)和函數(shù)表達(dá)式,詳細(xì)介紹了函數(shù)表達(dá)式、命名函數(shù)表達(dá)式的方法,感興趣的小伙伴們可以參考一下2015-11-11js閉包實(shí)現(xiàn)按秒計(jì)數(shù)
閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。相信很少有人能直接看懂這句話,因?yàn)樗枋龅奶珜W(xué)術(shù)。其實(shí)這句話通俗的來(lái)說(shuō)就是:JavaScript中所有的function都是一個(gè)閉包。2015-04-04用nodejs訪問(wèn)ActiveX對(duì)象,以操作Access數(shù)據(jù)庫(kù)為例。
有人提問(wèn)“如果用nodejs訪問(wèn)sql server?” 找了找資料,發(fā)現(xiàn)有兩類解決方法,使用第三方nodejs插件2011-12-12JavaScript文件的同步和異步加載的實(shí)現(xiàn)代碼
本篇文章主要介紹了JavaScript文件的同步和異步加載的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08