鴻蒙4.0開發筆記之ArkTS語法基礎之數據傳遞與共享詳細講解(十八)

文章目錄

    • 一、路由數據傳遞(router)
      • 1、路由數據傳遞定義
      • 2、路由數據傳遞使用方法
      • 3、數據傳遞兩個頁面的效果
    • 二、頁面間數據共享(EntryAbility)
      • 1、定義
      • 2、實現案例
      • 3、避坑點
    • 三、數據傳遞練習

一、路由數據傳遞(router)

1、路由數據傳遞定義

即使用router.pushUrl進行路由跳轉,從而實現頁面間的數據傳遞。這個方法可以實現一個頁面向另一個指定頁面的數據傳遞和共享。

2、路由數據傳遞使用方法

(1)例如在LifeCircle頁面的Build()組件下創建一個頁面跳轉的按鈕,實現頁面跳轉,

		//驗證頁面跳轉的數據傳遞按鈕Button('頁面跳轉')

(2)在按鈕中創建點擊事件,點擊事件內容就是使用router.pushUrl()進行頁面跳轉,跳轉到另外一個新建的頁面“pages/LifeCircle2”中。并且跳轉時攜帶一個對象數據,包含有id、name、age3個數據元素。

			//創建點擊事件.onClick(()=>{//調用路由函數,進行頁面的跳轉,除了路徑,同時帶有一個對象,包括三個鍵值對元素router.pushUrl({url:"pages/LifeCircle2",params: {id:'001',name:'頁面壹',age:25}})})

(3)在另外一個頁面LifeCircle2中接收數據,獲取跳轉對象的數據,利用鍵值對的鍵名進行取值。

let pageID = router.getParams()['id'] as string
let pageName = router.getParams()['name']
let pageAge = router.getParams()['age']

(4)最后在第二個頁面LifeCircle2呈現從其他頁面獲取的數據。

Divider()
Text(pageID).fontSize(40).backgroundColor(Color.Yellow)
Text(pageName).fontSize(40).backgroundColor(Color.Yellow)
Text(pageAge).fontSize(40).backgroundColor(Color.Yellow)

(5)在第二個頁面LifeCircle2內創建返回按鈕和返回路由函數調用。

//驗證頁面跳轉的數據傳遞按鈕Button('點擊返回')//創建點擊事件.onClick(() => {//調用路由函數,進行頁面的跳轉,除了路徑,同時帶有一個對象,包括三個鍵值對元素router.back()})

3、數據傳遞兩個頁面的效果

LifeCircle效果:
01
LifeCircle2效果:
02

二、頁面間數據共享(EntryAbility)

1、定義

這是一種全局的數據共享方法,可以在所有頁面之間進行數據共享。實現方法就是在EntryAbility.ts文件中使用AppStorage.SetOrCreate()進行數據的定義,這個數據就可以在這個項目所有的頁面中進行數據獲取,通過AppStorage.Get()獲取。

2、實現案例

(1)首先在roject/entry/src/main/ets/entryability/EntryAbility.ts文件中定義一個數據:
03
(2)然后在LifeCircle中進行數據獲取:
04

3、避坑點

Previewer預覽器中無法顯示效果,因為在預覽該頁面時,EntryAbility.ts文件還沒有執行,因此無法獲取到頁面之間共享的數據。
在這里插入圖片描述
解決方法:使用本地模擬器、真機模擬器或者遠程模擬器(建議),記得將默認的啟動頁面修改為需要調試的頁面。如何修改請參考文章:HarmonyOS 修改App的默認加載的界面(ArkTS版本)本次使用的華為官方的遠程模擬器,這樣就可以看到效果了:
在這里插入圖片描述

三、數據傳遞練習

1、EntryAbility頁面
05
2、LifeCircle頁面

import router from '@ohos.router'//在應用程序的各個頁面中取出由EntryAbility定義的共享數據:使用AppStorage.Get
let name:string = AppStorage.Get('AppName')@Entry
@Component
struct LifeCircle {//調用從EntryAbility中獲取的數據賦值給message,并在后方用Text呈現@State message: string = name@State isAppear:boolean = truebuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()Button('顯示/隱藏子組件').backgroundColor(Color.Orange).onClick(()=>{this.isAppear = !this.isAppear})if(this.isAppear){LifeCircle_son()}//驗證頁面跳轉的數據傳遞按鈕Button('頁面跳轉')//創建點擊事件.onClick(()=>{//調用路由函數,進行頁面的跳轉,除了路徑,同時帶有一個對象,包括三個鍵值對元素router.pushUrl({url:"pages/LifeCircle2",params: {id:'001',name:'頁面壹',age:25}})})}.width('100%')}.height('100%')}//頁面顯示onPageShow(){//打印出頁面顯示的提醒console.log('LifeCircle1: Page is onPageShow')}//頁面隱藏onPageHide(){//打印出頁面隱藏的提醒console.log('LifeCircle1: Page is onPageHide')}//頁面返回:手機按鈕上的返回onBackPress(){//打印出頁面返回的提醒console.log('LifeCircle1: Page is onBackPress')}//aboutToAppear和aboutToDisappear也可以放在入口組件中,后者表示程序被sha死時調用的函數//組件即將出現時回調該接?aboutToAppear(){console.log('LifeCircle1: Page is 入口aboutToAppear')}//組件析構銷毀時觸發的函數aboutToDisappear(){console.log('LifeCircle1: Page is 入口aboutToDisappear')}
}//子組件的內容
@Component
struct LifeCircle_son{build(){Column(){Text('頁面1子組件內容').fontSize(40).fontStyle(FontStyle.Italic)}}//組件即將出現時回調該接?aboutToAppear(){console.log('LifeCircle1: Page is 子組件aboutToAppear')}//組件析構銷毀時觸發的函數aboutToDisappear(){console.log('LifeCircle1: Page is 子組件aboutToDisappear')}
}

3、LifeCircle2頁面

import router from '@ohos.router';
//獲取跳轉對象的數據:利用鍵值對的鍵名進行取值
//從其他頁面接收的數據不知道其變量,暫時作為string接收
let pageID = router.getParams()['id'] as string
let pageName = router.getParams()['name']
let pageAge = router.getParams()['age']@Entry
@Component
struct LifeCircle2 {@State message: string = 'Hello World'@State isAppear:boolean = truebuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()Button('顯示/隱藏子組件').backgroundColor(Color.Orange).onClick(() => {this.isAppear = !this.isAppear})if (this.isAppear) {LifeCircle_son()}//在第二個頁面使用從其他頁面獲取的數據Divider()Text(pageID).fontSize(40).backgroundColor(Color.Yellow)Text(pageName).fontSize(40).backgroundColor(Color.Yellow)Text(pageAge).fontSize(40).backgroundColor(Color.Yellow)//驗證頁面跳轉的數據傳遞按鈕Button('點擊返回')//創建點擊事件.onClick(() => {//調用路由函數,進行頁面的跳轉,除了路徑,同時帶有一個對象,包括三個鍵值對元素router.back()})}.width('100%')}.height('100%')}//頁面顯示onPageShow(){//打印出頁面顯示的提醒console.log('LifeCircle2: Page is onPageShow')}//頁面隱藏onPageHide(){//打印出頁面隱藏的提醒console.log('LifeCircle2: Page is onPageHide')}//頁面返回:手機按鈕上的返回onBackPress(){//打印出頁面返回的提醒console.log('LifeCircle2: Page is onBackPress')}//aboutToAppear和aboutToDisappear也可以放在入口組件中,后者表示程序被sha死時調用的函數//組件即將出現時回調該接?aboutToAppear(){console.log('LifeCircle2: Page is 入口aboutToAppear')}//組件析構銷毀時觸發的函數aboutToDisappear(){console.log('LifeCircle2: Page is 入口aboutToDisappear')}
}//子組件的內容
@Component
struct LifeCircle_son{build(){Column(){Text('頁面2子組件內容').fontSize(40).fontStyle(FontStyle.Italic)}}//組件即將出現時回調該接?aboutToAppear(){console.log('LifeCircle2: Page is 子組件aboutToAppear')}//組件析構銷毀時觸發的函數aboutToDisappear(){console.log('LifeCircle2: Page is 子組件aboutToDisappear')}
}

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

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

相關文章

PaaS(平臺即服務)——云計算服務模型(特點,應用場景,優點和缺點,示例)

PaaS(平臺即服務)是云計算的一種服務模型,它提供了一個平臺,允許客戶開發、運行和管理應用程序,而無需建立和維護通常與這些過程相關的復雜基礎設施。PaaS 是作為服務交付的一種方式,它提供了一套工具和服務…

網卡學習資料整理

GMAC網卡相關介紹與分析 https://www.cnblogs.com/forwards/p/17101438.html https://www.eefocus.com/article/1635234.html Linux Phy 驅動解析_linux phy驅動-CSDN博客 GMAC接口五篇 https://blog.csdn.net/dkmknjk/category_11837422.html 以太網掃盲(一&am…

麒麟V10服務器安裝Apache+PHP

安裝PHP yum install php yum install php-curl php-gd php-json php-mbstring php-exif php-mysqlnd php-pgsql php-pdo php-xml 配置文件 /etc/php.ini 修改參數 date.timezone Asia/Shanghai max_execution_time 60 memory_limit 1280M post_max_size 200M file_upload…

分布式和微服務區別

1.分布式 微服務和分布式的區別 1.將一個大的系統劃分為多個業務模塊,業務模塊分別部署到不同的機器上,各個業務模塊之間通過接口進行數據交互。區別分布式的方式是根據不同機器不同業務。 2.分布式是否屬于微服務? 答案是肯定的。微服務的意…

動手制作個人電腦對話機器人transformers+DialoGPT

簡介:DialoGPT是一個對話模型,由微軟基于GPT-2訓練。由于DialoGPT在對話數據上進行了預訓練,所以它比原始的GPT-2更擅長生成類似對話的文本。DialoGPT的主要目標是生成自然且連貫的對話,而不是在所有情況下都提供事實上的正確答案…

基于Spring、SpringMVC、MyBatis開發的游樂場管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于Spring、SpringMVC、MyBatis開發的游…

ca單點登錄

最近搞得單點登錄碰到了很多問題,具體的問題有如下幾個: ①如何獲取usbkey的值 ②要實現的單點登錄的方案 ③如何獲取多個key的值,并進行選擇登錄 ④ie跳谷歌訪問業務界面 注:最后將實現代碼附上,希望對大家有所幫助 1…

Numpy數組的運算(第7講)

Numpy數組的運算(第7講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ????????????????????????????????????????????????????????????????????????????????????????…

進制 + 原碼,反碼,補碼

進制轉換 整數部分 小數部分 原碼 反碼 補碼 原碼轉補碼: 左邊和右邊第一個1不變,中間取反。-0 除外。 計算機系統中數值一律用補碼來存儲的原因 其他 術語 進制表 進制數的表示 詳細教程可轉 愛編程的大丙

數學建模-數據新動能驅動中國經濟增長的統計研究-基于數字產業化和產業數字化的經濟貢獻測度

數據新動能驅動中國經濟增長的統計研究-基于數字產業化和產業數字化的經濟貢獻測度 整體求解過程概述(摘要) 伴隨著數據要素化進程的不斷加深,對于數據如何作用于經濟發展,數據與其他要素結合產生的動能應該如何測度的研究愈發重要。本文將數據新動能分…

sql 條件統計,count+if+sum

1,前提 看同事寫的sql語句時,覺得他寫的這個countsumif的sql還挺新鮮, 學習記錄下,感覺這個挺適合用來對歷史數據做條件統計 2,count使用結果 select count(0);//1select count(1);//1select count(null);//0select…

機器人剛性碰撞任務的阻抗控制性能

問題描述 對于機器人剛性碰撞任務,阻抗控制可以有效地提高機器人的適應性和穩定性。 在剛性碰撞任務中,機器人在接觸外部物體時需要快速適應并調整自身的運動軌跡和速度,以實現精確的操控和穩定的交互。阻抗控制可以通過調整機器人的阻抗參…

【Flink系列五】Checkpoint及Barrier原理

本章內容 一致性檢查點從檢查點恢復狀態檢查點實現算法-barrier保存點Savepoint狀態后端(state backend) 本文先設置一個前提,流處理的數據都是可回放的(可以理解成消費的kafka的數據) 一致性檢查點(che…

深度學習之注意力機制

注意力機制與外部記憶 注意力機制與記憶增強網絡是相輔相成的,神經網絡去從內存中或者外部記憶中選出與當前輸入相關的內容時需要注意力機制,而在注意力機制的很多應用場景中,我們的外部信息也可以看作是一個外部的記憶 這是一個閱讀理解任務…

Nodejs安裝使用,nvm對Nodejs和npm版本控制

Nodejs 安裝 使用: npm 是Nodejs的內置 包管理工具 下載長期支持版本Node.js 中文網Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全…

Flink之JDBCSink連接MySQL

輸出到MySQL 添加依賴 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1.0-1.17</version> </dependency> <dependency><groupId>com.mysql</gr…

在pytorch中自定義dataset讀取數據

這篇是我對嗶哩嗶哩up主 霹靂吧啦Wz 的視頻的文字版學習筆記 感謝他對知識的分享 有關我們數據讀取預訓練 以及如何將它打包成一個一個batch輸入我們的網絡的 首先我們來看一下之前我們在講resnet網絡時所使用的源碼 我們去使用了官方實現的image folder去讀取我們的圖像數據 然…

xilinx的XVC協議

文章目錄 概述JTAG工作方式XVC協議 其他Debug Bridge IP 概述 JTAG工作方式 XVC協議 其他 Debug Bridge IP

Python正則表達式指南

正則表達式指南 摘要 本文是關于在 Python 中通過 re 模塊使用正則表達式的入門教程。它提供了比“標準庫參考”的相關章節更平易的介紹。 引言 正則表達式&#xff08;Regular expressions&#xff0c;也叫 REs、 regexs 或 regex patterns&#xff09;&#xff0c;本質上…

設計模式基礎——概述(1/2)

目錄 一、設計模式的定義 二、設計模式的三大類別 三、設計模式的原則 四、主要設計模式目錄 4.1 創建型模式&#xff08;Creational Patterns&#xff09; 4.2 結構型模式&#xff08;Structural Patterns&#xff09; 4.3 行為型模式&#xff08;Behavioral Patterns&…