【UniApp】-uni-app-CompositionAPI传递数据
前言
- 好,經過上個章節的介紹完畢之后,了解了一下 uni-app-傳遞數據
- 那么了解完了uni-app-傳遞數據之后,這篇文章來給大家介紹一下 uni-app-CompositionAPI傳遞數據
- 首先不管三七二十一,先來新建一個項目
搭建演示環境
創建一個全新的項目:
然后在配置一下,微信小程序的 AppId,直接去之前的項目中拷貝一下即可,找到之前項目的 manifest.json 文件,然后選擇微信小程序配置,復制一下即可。
- 經過如上的這么一頓操作之后,就可以搭建完畢運行環境,與編碼環境
- 接下來就可以開始進行介紹 uni-app-CompositionAPI傳遞數據內容了
步入正題
通過路徑拼接傳遞數據
創建一個 one 頁面,我們在首頁當中編寫一個按鈕,點擊按鈕跳轉到 one 頁面,然后在 one 頁面當中顯示傳遞過來的數據,我這里是通過 CompositionAPI 來進行傳遞數據的,代碼如下:
<template>
<view>
<button type="primary" @click="onJumpOne">跳轉到One界面</button>
</view>
</template>
<script setup>
function onJumpOne() {
uni.navigateTo({
url: '/pages/one/one?name=BNTang&age=18'
})
}
</script>
然后在 one 頁面當中接收數據,代碼如下:
<template>
<view>
<text>One</text>
</view>
</template>
<script setup>
import {
onLoad
} from '@dcloudio/uni-app'
onLoad((option) => {
console.log(option)
})
</script>
然后我們點擊按鈕,跳轉到 one 頁面,可以看到控制臺打印出了我們傳遞過來的數據:
除了通過 option 來接收數據之外,我們還可以通過 props 來接收數據,代碼如下:
<script setup>
const props = defineProps({
name: String,
age: Number
})
console.log(props.name, props.age);
</script>
好了,這是正向傳遞數據,那么反向傳遞數據呢?
反向傳遞數據
我們在 one 頁面當中編寫一個按鈕,點擊按鈕跳轉到首頁頁面,然后在首頁頁面當中顯示傳遞過來的數據,代碼如下:
<template>
<view>
<text>One</text>
<button type="primary" @click="goBackClick">返回首頁</button>
</view>
</template>
<script setup>
function goBackClick() {
uni.navigateBack({
delta: 1
});
}
</script>
頁面已經搭建好了,那么我們就可以開始傳遞數據了,在之前我們是通過 this.getOpenerEventChannel(); 來進行傳遞數據的,但是在 CompositionAPI 當中沒有 this,那么我們現在要做的第一件事情就是獲取 this,在 compositionAPI 當中獲取 this 可以通過 getCurrentInstance() 來獲取,代碼如下:
<script setup>
import {
ref,
getCurrentInstance
} from 'vue'
// 獲取 this
const $instance = ref(getCurrentInstance().proxy)
... other
</script>
竟然獲取到了 this,那么接下來的代碼就和之前的一樣了,代碼如下:
<script setup>
import {
ref,
getCurrentInstance
} from 'vue'
// 獲取 this
const $instance = ref(getCurrentInstance().proxy)
function goBackClick() {
uni.navigateBack({
delta: 1
});
const eventChannel = $instance.value.getOpenerEventChannel();
eventChannel.emit("acceptDataFromOpenerPage", {
data: '通過事件通道返回時傳遞數據'
})
}
</script>
如上代碼就是我們之前的逆著傳遞數據的代碼,改動的點就是之前是 this.getOpenerEventChannel(); 現在是 $instance.value.getOpenerEventChannel();,然后我們在首頁當中接收數據,代碼如下:
<script setup>
function onJumpOne() {
uni.navigateTo({
url: '/pages/one/one?name=BNTang&age=18',
events: {
acceptDataFromOpenerPage(data) {
console.log(data)
}
}
})
}
</script>
運行一下,點擊按鈕跳轉到 one 頁面,然后點擊返回按鈕,可以看到控制臺打印出了我們傳遞過來的數據:
正向傳遞數據
那么逆向傳遞看完了,正向傳遞就來快速過一下,首先更改首頁的代碼,代碼如下:
<script setup>
function onJumpOne() {
uni.navigateTo({
url: '/pages/one/one',
success(res) {
// 通過eventChannel向被打開頁面傳送數據
res.eventChannel.emit('acceptDataFromOpenerPage', {
data: '通過事件通道傳遞的數據'
})
}
})
}
</script>
然后在 one 頁面當中接收數據,代碼如下:
<script setup>
import {
ref,
getCurrentInstance
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
// 獲取 this
const $instance = ref(getCurrentInstance().proxy)
onLoad((option) => {
const eventChannel = $instance.value.getOpenerEventChannel();
eventChannel.on('acceptDataFromOpenerPage', function(data) {
console.log(data)
})
})
</script>
運行一下,點擊按鈕跳轉到 one 頁面,可以看到控制臺打印出了我們傳遞過來的數據:
最后
大家好我是 BNTang, 一個熱愛分享的技術的開發者,如果大家覺得我的文章對你有幫助的話,可以關注我的公眾號 JavaBoyL,我會在公眾號中分享一些IT技術和一些個人的見解,謝謝大家的支持。
總結
以上是生活随笔為你收集整理的【UniApp】-uni-app-CompositionAPI传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信号覆盖再无盲区(全覆盖 无盲区)
- 下一篇: 从滑动窗口到YOLO、Transform