前言
- 好,經過上個章節的介紹完畢之後,瞭解了一下 uni-app-CompositionAPI傳遞資料
- 那麼瞭解完了uni-app-CompositionAPI傳遞資料之後,這篇文章來給大家介紹一下 uni-app-資料傳遞補充(也就是在補充一點內容給到大家)
- 先主要介紹逆向傳遞資料,逆向傳遞資料除了使用事件通道之外,還可以透過
uni.$emit
的方式來進行傳遞資料,這種方式也是非常的簡單 - 先來簡單的搭建一個演示環境,然後來進行介紹
- 分別從 Vue2 與 Vue3 進行介紹
搭建演示環境
建立一個全新的專案(先來看 Vue2 版本的,所以在建立專案的時候選擇 Vue2):
然後在配置一下,微信小程式的 AppId,直接去之前的專案中複製一下即可,找到之前專案的 manifest.json
檔案,然後選擇微信小程式配置,複製一下即可。
- 經過如上的這麼一頓操作之後,就可以搭建完畢執行環境,與編碼環境
- 接下來就可以開始進行介紹 uni-app-資料傳遞補充內容了
步入正題
emit(Vue2)
- 專案建立好了,我們現在需要分別建立對應的頁面,分別是 one 與 index 頁面
- 在 one 頁面中建立一個按鈕,點選按鈕之後跳轉到 index 頁面,然後在 index 頁面中建立一個按鈕,點選按鈕之後跳轉到 one 頁面
- 在 one 返回按鈕的函式中,透過
uni.$emit
的方式來傳遞資料,然後在 index 頁面中透過uni.$on
來接收資料 - 在 index 頁面中除了透過
uni.$on
來接收資料之外,還需要在onUnload
生命週期函式中透過uni.$off
來取消監聽 - 反正你要記住監聽了方法那麼就一定要取消監聽,不然會造成記憶體洩漏的問題
one 頁面:
<template>
<view>
<text>one頁面</text>
<button type="primary" @click="onGoBackClick">返回到上一頁</button>
</view>
</template>
<script>
export default {
data() {
return {}
},
methods: {
onGoBackClick() {
uni.navigateBack({
delta: 1
});
// 透過 $emit 傳遞資料
uni.$emit("test", {
data: "透過$emit直接傳遞資料"
})
}
}
}
</script>
index 頁面:
<template>
<view>
<button @click="onJumpOne">navigateTo</button>
</view>
</template>
<script>
export default {
methods: {
onJumpOne() {
uni.navigateTo({
url: '/pages/one/one'
})
}
},
onLoad() {
uni.$on("test", (data) => {
console.log(data)
})
},
onUnload() {
uni.$off("test")
}
}
</script>
- 經過如上的這麼一番操作之後,我們就可以在控制檯中看到我們傳遞的資料了
emit(Vue3)
- 在 Vue3 中,其實寫法大差不差的,只不過在
setup
函式中進行編寫 - 廢話不多說,直接上程式碼
one 頁面:
<template>
<view>
<text>one</text>
<text>=======================</text>
<button type="default" @click="onGoBackClick">返回上一個介面</button>
</view>
</template>
<script setup>
function onGoBackClick() {
uni.navigateBack({
delta: 1
});
// 透過 $emit 傳遞資料
uni.$emit("test", {
data: "透過$emit直接傳遞資料"
})
}
</script>
index 頁面:
<template>
<view>
<button type="primary" @click="onJumpOne">跳轉到One介面</button>
</view>
</template>
<script setup>
import {
onLoad,
onUnload
} from '@dcloudio/uni-app'
function onJumpOne() {
uni.navigateTo({
url: '/pages/one/one'
})
}
onLoad(() => {
uni.$on("test", (data) => {
console.log(data)
})
})
onUnload(() => {
uni.$off("test")
})
</script>
總結
順著傳遞資料
- 透過URL傳遞資料,然後透過 onLoad 生命週期函式中的 options 引數來接收資料
- 透過 eventChannel.emit 事件通道傳遞資料,然後透過 eventChannel.on 來接收資料
逆向傳遞資料
- 透過
uni.$emit
傳遞資料,然後透過uni.$on
來接收資料(有一個注意點,就是uni.$on
註冊的事件一定要在頁面解除安裝的時候透過uni.$off
登出掉) - 透過 eventChannel.emit 事件通道傳遞資料,然後透過 events 引數來接收資料
End
- 如果你有任何問題或建議,歡迎在下方留言,我會盡快回復
- 如果你覺得本文對你有幫助,歡迎點贊、收藏,你的支援是我寫作的最大動力