uniapp+Vue3 組件之間的傳值方法

一、父子傳值(props / $emit 、ref / $refs)

1、props / $emit

父組件通過?props?向子組件傳遞數據,子組件通過?$emit?觸發事件向父組件傳遞數據。

?父組件:

// 父組件中<template><view class="container"><view class="row" v-for="(item, index) in listData" :key="item.pkId"><newsbox pageTitle="待辦" :itemInfo="item"></newsbox></view></view>
</template>
<script setup>import { ref } from 'vue';
let listData = ref([{name: "張三", age: "18"}, {name: "李四", age: "19"}])</script>
<style lang="scss" scoped>
.container{padding: 10rpx 30rpx;.row{padding: 10rpx 0;}
}
</style>

子組件:

// 子組件中<template><view class="box"><text class="title">{{pageTitle}}</text>	<text class="name">{{itemInfo.name}}</text>	</view>
</template>
<script setup>defineProps({itemInfo: {type: Object,default: {}},pageTitle: {type: String,default: ""}})
</script>
<style lang="scss" scoped>
.box {.title {font-size: 32rpx;}.name {font-size: 28rpx;}
}
</style>

二、兄弟傳值( $emit / $on )

借助中間代理,?$emit?和?$on

1、說明

uni.$emit(eventName,OBJECT)

觸發全局的自定義事件,附加參數都會傳給監聽器回調函數。

HarmonyOS Next 兼容性

?

代碼示例

uni.$emit('update',{msg:'頁面更新'})

uni.$on(eventName,callback)

監聽全局的自定義事件,事件由?uni.$emit?觸發,回調函數會接收事件觸發函數的傳入參數。

HarmonyOS Next 兼容性

?

代碼示例?

uni.$on('update',function(data){console.log('監聽到事件來自 update ,攜帶參數 msg 為:' + data.msg);
})

uni.$off(eventName, callback)

移除全局自定義事件監聽器。

HarmonyOS Next 兼容性

?

Tips

  • 如果uni.$off沒有傳入參數,則移除App級別的所有事件監聽器;
  • 如果只提供了事件名(eventName),則移除該事件名對應的所有監聽器;
  • 如果同時提供了事件與回調,則只移除這個事件回調的監聽器;
  • 提供的回調必須跟$on的回調為同一個才能移除這個回調的監聽器;

代碼示例

$emit$on$off常用于跨頁面、跨組件通訊,這里為了方便演示放在同一個頁面

	<template><view class="content"><view class="data"><text>{{val}}</text></view><button type="primary" @click="comunicationOff">結束監聽</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() {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>

注意事項

  • uni.$emituni.$onuni.$onceuni.$off 觸發的事件都是 App 全局級別的,跨任意組件,頁面,nvue,vue 等
  • 使用時,注意及時銷毀事件監聽,比如,頁面 onLoad 里邊 uni.$on 注冊監聽,onUnload 里邊 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 監聽
  • 注意 uni.$on 定義完成后才能接收到 uni.$emit 傳遞的數據
  • eventName?應避免使用?uni?開頭,以免與 uni-app 內置事件沖突

三、provide/inject

簡單講解:provide和inject叫依賴注入,是vue官方提供的API,它們可以實現多層組件傳遞數據,無論層級有多深,都可以通過這API實現。
假設這是太老爺組件: provide(‘名稱’, 傳遞的參數)向后代組件提供數據, 只要是后代都能接收

<template><div></div>
</template><script setup>
import { ref, provide } from 'vue'
const name = ref('天天鴨')
// 向后代組件提供數據, 只要是后代都能接收
provide('name', name.value)
</script>

最深層的孫組件: 無論層級多深,用 inject(接收什么參數) 進行接收即可?

<template><div>{{ name }}</div>
</template><script setup>
import { inject } from 'vue'
// 接收頂層組件的通信
const name = inject('name')
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73061.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL篇】MySQL基本查詢詳解

目錄 前言&#xff1a; 1&#xff0c;Create 1.1&#xff0c;單行數據全列插入 1.2&#xff0c;單行數據指定列插入 1.3&#xff0c;多行數據全列插入 1.4&#xff0c;多行數據指定列插入 1.5&#xff0c;插入否則更新 1.6&#xff0c;替換 2&#xff0c;Retrieve …

【Python入門】一篇掌握Python中的字典(創建、訪問、修改、字典方法)【詳細版】

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;《Python/PyTorch極簡課》_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目…

每日一題——兩數相加

兩數相加 問題描述問題分析解題思路代碼實現代碼解析注意事項示例運行總結 問題描述 給定兩個非空鏈表&#xff0c;表示兩個非負整數。鏈表中的每個節點存儲一個數字&#xff0c;數字的存儲順序為逆序&#xff08;即個位在鏈表頭部&#xff09;。要求將這兩個數字相加&#xff…

制作自定義鏡像

1. 確定軟件包 確定自己的環境都需要哪些命令&#xff0c;然后&#xff0c;從鏡像文件或者yum源下載響應的安裝包。 bash基本是必選的 &#xff08;bash-5.1.8-10.oe2203sp2.aarch64.rpm&#xff09; vim也是有必要的 &#xff08;vim-enhanced-9.0-15.oe2203sp2.aarch64.rpm…

WHAT - 前端性能指標

目錄 核心 Web Vitals&#xff08;Core Web Vitals&#xff09;加載性能指標網絡相關指標交互和響應性能指標內存與效率指標推薦的監控工具優化策略與建議推薦學習路線 作為前端開發者&#xff0c;理解并掌握關鍵的性能指標對優化 Web 應用至關重要。 以下是前端性能優化中常見…

C++20 模塊:告別頭文件,迎接現代化的模塊系統

文章目錄 引言一、C20模塊簡介1.1 傳統頭文件的局限性1.2 模塊的出現 二、模塊的基本概念2.1 模塊聲明2.2 模塊接口單元2.3 模塊實現單元 三、模塊的優勢3.1 編譯時間大幅減少3.2 更好的依賴管理3.3 命名空間隔離 四、如何使用C20模塊4.1 編譯器支持4.2 示例項目4.3 編譯和運行…

Apache Hudi 性能測試報告

一、測試背景 數據湖作為一個集中化的數據存儲倉庫,支持結構化、半結構化以及非結構化等多種數據格式,數據來源包含數據庫數據、增量數據、日志數據以及數倉上的存量數據等。數據湖能夠將這些不同來源、不同格式的數據集中存儲和管理在高性價比的分布式存儲系統中,對外提供…

sql靶場5-6關(報錯注入)保姆級教程

目錄 sql靶場5-6關&#xff08;報錯注入&#xff09;保姆級教程 1.第五關 1.步驟一&#xff08;閉合&#xff09; 2.步驟二&#xff08;列數&#xff09; 3.報錯注入深解 4.報錯注入格式 5.步驟三&#xff08;數據庫表名&#xff09; 6.常用函數 7.步驟四&#xff08;表…

OSPF-單區域的配置

一、單區域概念&#xff1a; 單區域OSPF中&#xff0c;整個網絡被視為一個區域&#xff0c;區域ID通常為0&#xff08;骨干區域&#xff09;。所有的路由器都在這個區域內交換鏈路狀態信息。 補充知識點&#xff1a; OSPF為何需要loopback接口&#xff1a; 1.Loopback接口的…

LeetCode100之二叉樹的直徑(543)--Java

1.問題描述 給你一棵二叉樹的根節點&#xff0c;返回該樹的 直徑 。 二叉樹的 直徑 是指樹中任意兩個節點之間最長路徑的 長度 。這條路徑可能經過也可能不經過根節點 root 。 兩節點之間路徑的 長度 由它們之間邊數表示。 示例1 輸入&#xff1a;root [1,2,3,4,5] 輸出&#…

C語言每日一練——day_4

引言 針對初學者&#xff0c;每日練習幾個題&#xff0c;快速上手C語言。第四天。&#xff08;連續更新中&#xff09; 采用在線OJ的形式 什么是在線OJ&#xff1f; 在線判題系統&#xff08;英語&#xff1a;Online Judge&#xff0c;縮寫OJ&#xff09;是一種在編程競賽中用…

工作流編排利器:Prefect 全流程解析

工作流編排利器&#xff1a;Prefect 全流程解析 本文系統講解了Prefect工作流編排工具&#xff0c;從基礎入門到高級應用&#xff0c;涵蓋任務與流程管理、數據處理、執行器配置、監控調試、性能優化及與其他工具集成等內容&#xff0c;文末項目實戰示例&#xff0c;幫助讀者全…

Web Workers 客戶端 + 服務端應用

一. Web Workers 客戶端應用 使用 JavaScript 創建 Web Worker 的步驟如下&#xff1a; 1.創建一個新的 JavaScript 文件&#xff0c;其中包含要在工作線程中運行的代碼&#xff08;耗時任務&#xff09;。該文件不應包含對 DOM 的引用&#xff0c;因為在工作線程中無法訪問 …

大模型工具Ollama存在安全風險

國家網絡安全通報中心&#xff1a;大模型工具Ollama存在安全風險 來源&#xff1a;國家網絡與信息安全信息通報中心 3月3日&#xff0c;國家網絡安全通報中心發布關于大模型工具Ollama存在安全風險的情況通報&#xff0c;內容如下&#xff1a; 據清華大學網絡空間測繪聯合研…

LINUX系統安裝+添加共享目錄

一、前言 Windows或mac系統中創建Linux工作環境是基于VMware和SL(Scientific Linux)&#xff0c;下面分別安裝二者。 二、VMware軟件安裝及注冊 1、雙擊VMware安裝包 2、點擊下一步 3、 勾選接受許可&#xff0c;并點擊下一步 4、更改路徑&#xff08;建議更改為容易找到的路…

BI 工具響應慢?可能是 OLAP 層拖了后腿

在數據驅動決策的時代&#xff0c;BI 已成為企業洞察業務、輔助決策的必備工具。然而&#xff0c;隨著數據量激增和分析需求復雜化&#xff0c;BI 系統“卡”、“響應慢”的問題日益突出&#xff0c;嚴重影響分析效率和用戶體驗。 本文將深入 BI 性能問題的根源&#xff0c;并…

基于SSM+Vue的汽車維修保養預約系統+LW示例

1.項目介紹 系統角色&#xff1a;管理員、員工、用戶功能模塊&#xff1a;用戶管理、員工管理、汽車類型管理、項目類型管理、維修/預約訂單管理、系統管理、公告管理等技術選型&#xff1a;SSM&#xff0c;vue&#xff08;后端管理web&#xff09;&#xff0c;Layui&#xff…

在rocklinux里面批量部署安裝rocklinx9

部署三臺Rockylinux9服務器 實驗要求 1. 自動安裝ubuntu server20以上版本 2. 自動部署三臺Rockylinux9服務器&#xff0c;最小化安裝&#xff0c;安裝基礎包&#xff0c;并設定國內源&#xff0c;設靜態IP 實驗步驟 安裝軟件 # yum源必須有epel源 # dnf install -y epel-re…

Oxidized收集H3C交換機網絡配置報錯,not matching configured prompt (?-mix:^(<CD>)$)

背景&#xff1a;問題如上標題&#xff0c;H3C所有交換機配置的model都是comware 解決方案&#xff1a; 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…

mac本地安裝運行Redis-單機

記錄一下我以前用的連接服務器的跨平臺SSH客戶端。 因為還要準備畢設...... 服務器又過期了&#xff0c;只能把redis安裝下載到本地了。 目錄 1.github下載Redis 2.安裝homebrew 3.更新GCC 4.自行安裝Redis 5.通過 Homebrew 安裝 Redis 安裝地址&#xff1a;https://git…