Uni-app返回上一頁面并攜帶參數(shù)的實(shí)現(xiàn)方法
一、前言
需要實(shí)現(xiàn)這么一個需求:在一個列表頁面,當(dāng)子頁面直接返回時,不刷新列表頁面。但是當(dāng)子頁面的數(shù)據(jù)有變動時,需要刷新列表頁面。本篇博客記錄一下我是如何解決這個問題的。
解決思路:在onShow()方法內(nèi)監(jiān)聽返回?cái)?shù)據(jù),當(dāng)是需要當(dāng)前頁面刷新時,在子頁面設(shè)置一個標(biāo)識符,當(dāng)監(jiān)聽到這個標(biāo)識符,就調(diào)用接口刷新數(shù)據(jù)。
在使用過程中遇到了些小坑,小白建議看完全部的內(nèi)容再選適合自己的方法解決,不要盲目copy代碼。
二、實(shí)現(xiàn)方法
1、第一個頁面 one.vue ,在onShow()方法內(nèi)監(jiān)聽返回的參數(shù),返回的參數(shù)在上一級頁面定義的變量叫‘isRefresh’;
<template> <view> <navigator hover-class="none" url="/pages/two/two">跳到第二個頁面</navigator> </view> </template> <script> export default { data() { return { } }, onShow() { let that = this uni.$on('isRefresh',function(data){ console.log('監(jiān)聽到事件來自返回的參數(shù):' + data); // TODO 下面執(zhí)行刷新的方法 }) }, methods: { } } </script> <style> </style>
2、第二個頁面 two.vue,返回one.vue頁面,要傳遞的參數(shù)是index:1
<template> <view> <button @click="goBack">點(diǎn)擊返回上一頁</button> </view> </template> <script> export default { data() { return { index:1,//返回上一頁要穿的參數(shù) } }, methods: { goBack() { uni.$emit('isRefresh', this.index) uni.navigateBack({ delta: 1 }) } } } </script> <style> </style>
三、遇到的坑
當(dāng)?shù)谝淮畏祷亓斜眄撁鏁r,沒有問題。第二次返回時,會監(jiān)聽兩次,第三次會監(jiān)聽三次,依次類推。查詢uni.$emit相關(guān)資料后發(fā)現(xiàn),這個是個全局的通訊事件。自 HBuilderX 2.0.0 起支持 uni.$emit
、 uni.$on
、 uni.$once
、uni.$off
,可以方便的進(jìn)行頁面的通訊 ,觸發(fā)的事件都是 App 全局級別的,跨任意組件,頁面,nvue,vue 等。事件詳情
調(diào)用事件后要記得移除事件,或者直接使用 uni.$once 只調(diào)用一次,用完會自動移除事件。
四、事件詳解
含義
1.uni.$emit(eventName,OBJECT)
:監(jiān)聽全局的自定義事件,事件由uni.emit
觸發(fā),回調(diào)函數(shù)會接收事件觸發(fā)函數(shù)的傳入?yún)?shù)。
其中eventName為事件名,OBJECT為觸發(fā)事件附加參數(shù)
示例代碼如下:
uni.$emit('update',{msg:'頁面更新'})
2.uni.$on(eventName,callback)
:監(jiān)聽全局自定義事件,事件由uni.$emit()
觸發(fā),回調(diào)函數(shù)會接收所有傳入的數(shù)。
eventName為事件名,callback為事件的回調(diào)函數(shù)。
示例代碼如下:
uni.$on('update',function(data){ console.log('監(jiān)聽到事件來自 update ,攜帶參數(shù) msg 為:' + data.msg); })
3.uni.$once:監(jiān)聽全局的自定義事件,事件由uni.emit 觸發(fā),但僅觸發(fā)一次,在第一次觸發(fā)之后移除該監(jiān)聽器。不需要手動移除監(jiān)聽。
4.uni.$off
:移除全局自定義事件監(jiān)聽器。
因此,本次案例只需要使用 uni.$once 即可滿足需求,將 uni.$on 改成 uni.$once
<template> <view> <navigator hover-class="none" url="/pages/two/two">跳到第二個頁面</navigator> </view> </template> <script> export default { data() { return { } }, onShow() { let that = this uni.$once('isRefresh',function(data){ console.log('監(jiān)聽到事件來自返回的參數(shù):' + data); // TODO 下面執(zhí)行刷新的方法 }) }, methods: { } } </script> <style> </style>
Tips
- 如果uni.$off沒有傳入?yún)?shù),則移除App級別的所有事件監(jiān)聽器;
- 如果只提供了事件名(eventName),則移除該事件名對應(yīng)的所有監(jiān)聽器;
- 如果同時提供了事件與回調(diào),則只移除這個事件回調(diào)的監(jiān)聽器;
- 提供的回調(diào)必須跟$on的回調(diào)為同一個才能移除這個回調(diào)的監(jiān)聽器;
示例:
<template> <view class="content"> <view class="data"> <text>{{val}}</text> </view> <button type="primary" @click="comunicationOff">結(jié)束監(jiān)聽</button> </view> </template> <script> export default { data() { return { val: 0 } }, onLoad() { setInterval(()=>{ uni.$emit('add', { data: 2 }) },1000) uni.$on('add', this.add) }, methods: { comunicationOff() { // 因傳入了回調(diào)函數(shù),只會移除本頁面此回調(diào)函數(shù)的監(jiān)聽 uni.$off('add', this.add) }, add(e) { this.val += e.data } } } </script> <style> .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .data { text-align: center; line-height: 40px; margin-top: 40px; } button { width: 200px; margin: 20px 0; } </style>
到此這篇關(guān)于Uni-app返回上一頁面并攜帶參數(shù)的文章就介紹到這了,更多相關(guān)Uni-app返回上一頁攜帶參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript基于定時器實(shí)現(xiàn)進(jìn)度條功能實(shí)例
這篇文章主要介紹了javascript基于定時器實(shí)現(xiàn)進(jìn)度條功能,簡單分析了javascript定時器的功能、使用方法并給出了基于定時器實(shí)現(xiàn)的進(jìn)度條功能實(shí)例,需要的朋友可以參考下2017-10-10基于JavaScript實(shí)現(xiàn)除夕煙花秀與隨機(jī)祝福語
新年即將來臨,本文將為大家介紹一個基于JavaScript實(shí)現(xiàn)的頁面特效:煙花秀+春節(jié)隨機(jī)祝福語。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-01-01在JavaScript中調(diào)用OpenAI?API的詳細(xì)步驟
在?JavaScript?中調(diào)用?OpenAI?API?也非常簡單,下面我將結(jié)合具體代碼示例以及使用場景,詳細(xì)講解如何使用?JavaScript?調(diào)用?OpenAI?API,需要的朋友可以參考下2025-04-04JavaScript 阻止超鏈接跳轉(zhuǎn)的操作方法(多種寫法)
很多朋友問小編能否通過JavaScript來阻止超鏈接的跳轉(zhuǎn)呢,今天給大家通過多種寫法來實(shí)現(xiàn)這一功能,具體實(shí)例代碼跟隨小編一起看看吧2021-06-06localStorage的黑科技-js和css緩存機(jī)制
本文主要介紹了localStorage的黑科技-js和css緩存機(jī)制的相關(guān)知識,具有一定的參考價值,下面跟著小編一起來看下吧2017-02-02