成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

清濁-《鴻蒙應用程序開發(fā)-董昱》-第五章JavaScript UI設計

開發(fā) 前端
本文是讀書筆記,學習筆記。包含書中內容的對比總結、關鍵提煉、知識補充、思維導圖。在JS UI開發(fā)的學習過程,會著重思考與Java UI開發(fā)的差異。

[[425229]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.51cto.com

引言

一、本文的目的

1.本文是讀書筆記,學習筆記。包含書中內容的對比總結、關鍵提煉、知識補充、思維導圖。在JS UI開發(fā)的學習過程,會著重思考與Java UI開發(fā)的差異。

2.鑒于官方文檔關于JS UI的講解很散亂、不聚焦,在北向HCIA學習路上就需要各位大佬出的書和視頻來助力,近期會從三本書籍去學習JS UI開發(fā)去學習和祖做筆記,并對三本書關于這一塊兒知識的講解做一個總結,最后解析JS UI官方示例工程。書籍分別是《鴻蒙應用程序開發(fā)-董昱》、《鴻蒙操作系統(tǒng)應用開發(fā)實踐-中科院》、《鴻蒙操作系統(tǒng)開發(fā)入門經典-徐文禮》

二、學習《鴻蒙應用程序開發(fā)-董昱》的體驗

1.代碼很規(guī)范!很規(guī)范!很規(guī)范!有注解

2.董昱老師的示例代碼目前已學習到的,沒有是直接從官方文檔的示例代碼拿下來的,很用心了。示例代碼塊的上方都有所在文件的位置!!!!不需要焦慮代碼該敲在哪兒的問題了。

3.在JS UI這塊兒官方文檔的知識很散亂,不聚焦,董昱老師的講解很系統(tǒng)

4.董昱老師對參數的解釋很到位

5.方法的圖解、概念的圖示都很到位

6.最后也是最關鍵的一點!董昱老師的《鴻蒙應用程序開發(fā)》有免費的配套課程!!!!鴻蒙應用程序開發(fā)視頻教程

7.學習JS開發(fā)官方文檔,以下兩個文檔比較好。

一、JavaScript UI設計

5.0概述

Java UI與JS UI

區(qū)別

  • Java UI開發(fā) 安卓型(事件式編程范式)
  • JS UI開發(fā) Web前端(聲明式編程范式)

聯(lián)系

  • JS UI更加傾向于界面開發(fā),在復雜業(yè)務邏輯方面,需要Java來幫忙。
  • 在輕量級智能穿戴設備上的JS UI會更輕量級一點,并不能使用所有的JS UI特性

HML與HTML

區(qū)別

  • HML:鴻蒙標記語言,表述用戶界面結構
  • HTML:超文本標記語言,描述 web文檔的一種標記語言(大家熟知不做贅述)

聯(lián)系

  • 一門標記語言
  • 一種文件類型
  • HTML與HML的用法及其相似

5.1 初識Js UI

5.1.1 JS實例與頁面

(1)概念辨析

1.創(chuàng)建工程

繼承的類有變化

  • 之前:Ability
  • 現(xiàn)在:AceAbility

主要管理JS目錄下的文件

關于:common.images文件夾的疑惑,其實就是形式上變了一點點而已,不影響的。

2.實例與頁面

實例(JavaScript實例):

  • 一組與功能相關的用戶界面和功能
  • 默認的實例名稱為default

實例與Ability

  • 每個獨立的實例都被獨立的Ability管理
  • default實例默認被MainAbility管理

實例與Page

  • 在實例中,可以創(chuàng)建多個用戶界面,其中每個用戶界面被稱為一個頁面(Page)

實例、頁面、Ability可視化關系圖

JS UI的頁面(Page)與Java UI中的界面(AbilitySlice)

  • 兩者相似
  • 要用于承載單個頁面的具體邏輯實現(xiàn)和界面UI,是應用顯示、運行和跳轉的最小單元

實例配置

位置:config.json

屬性:

  • name:實例名,默認default
  • pages:聲明實例所包含的頁面
  • Page屬性是頁面路徑組成的數組
  • 頁面路徑是以實例目錄為根目錄的路徑,不帶后綴

window:聲明與虛擬像素相關的選項

  • designWidth:虛擬寬度(px像素此時也是虛擬)
  • autoDesignWidth:是否啟動(fasle且不設虛擬寬度則px為實際物理寬度)

代碼:

(2)概念補充

關于視覺中的基礎概念補充HarmonyOS官方文檔-設計-視覺風格-基礎概念

虛擬像素單位:vp

  • 虛擬像素(virtual pixel)是一臺設備針對應用而言所具有的虛擬尺寸(區(qū)別于屏幕硬件本身的像素單位)。它提供了一種靈活的方式來適應不同屏幕密度的顯示效果。

字體像素單位:fp

  • 字體像素(font pixel) 大小默認情況下與 vp 相同,即默認情況下 1 fp = 1vp。如果用戶在設置中選擇了更大的字體,字體的實際顯示大小就會在 vp 的基礎上乘以 scale 系數,即 1 fp = 1 vp * scale。

關于尺寸單位的補充HarmonyOS官方文檔-Native API-JS API-語法-CSS語法參考

邏輯像素px(文檔中以表示):

1. 默認卡片具有的邏輯寬度為150px,實際顯示時會將頁面布局縮放至屏幕實際寬度,如100px在寬度為300的卡片上,實際渲染為200物理像素(從150px向300物理像素,所有尺寸放大2倍)。

2. 額外配置autoDesignWidth為true時,邏輯像素px將按照屏幕密度進行縮放,如100px在屏幕密度為3的設備上,實際渲染為300物理像素。應用需要適配多種設備時,建議采用此方法。

5.1.2 新JS實例

兩種方法

創(chuàng)建新的JS UI的PA,并同時創(chuàng)建實例

解疑:Launcher Ability

僅創(chuàng)建一個新的實例

Ability與實例的指定

跟Java中Ability與AbilitySlice的指定是類似的

  • Java中通過setUIContent()
  • Js中通過setInstanceName()

注:

1.默認情況MainAbility加載default實例,不需要通過setInstanceName()傳入default這個實例名稱字符串。

2.setInstanceName(String name)的參數“name”指實例名稱,實例名稱與config.json文件中module.js.name的值對應。

5.1.3 初識頁面

講JS開發(fā)目錄的介紹,著重講清楚了i18n目錄的來歷、結構、用處。

其他內容見HarmonyOS官方文檔-開發(fā)-UI-JS UI框架-初步體驗JS FA應用-JS FA概述

5.1.4頁面跳轉

(1)概念

頁面棧:JS UI中,支持頁面的層級結構,即上層頁面遮蓋下層頁面,形成棧結構。

頁面路由:頁面的跳轉關系被稱為頁面路由,由JS UI的router模塊來管理,需要js文件的export default的代碼塊前進行導入

  1. import router from '@system.router'

(2)router模塊

ctrl+鼠標左鍵router進去以后,對英文注解進行翻譯

方便記憶的方法總結(老師書上還對參數做了一定的解釋,特別棒)

  • push(obj: Router Options):跳轉(覆蓋)
  • replace(obj: RouterOptions):跳轉(銷毀)
  • back(obj?: BackRouterOptions):返回
  • clear():清除(被遮蓋的頁面)
  • getLength():堆棧中的頁數
  • getState():獲取有關當前頁面狀態(tài)的信息,返回IRouterState對象,該對象包括index、name、path。
  • index:整型,表示當前頁面所在的頁面棧中的位置,從底層到頂層是從1開始計數的
  • name:字符串,表示當前頁面的文件名
  • path:字符串,表示當前頁面的路徑
  1. /** 
  2.  * @Syscap SysCap.ACE.UIEngine 
  3.  */ 
  4. export default class Router { 
  5.   /** 
  6.    * Navigates to a specified page in the application based on the page URL and parameters. 
  7.    * 根據頁面URL和參數導航到應用程序中的指定頁面。 
  8.    * @param obj 
  9.    */ 
  10.   static push(obj: RouterOptions): void; 
  11.  
  12.   /** 
  13.    * Replaces the current page with another one in the application. The current page is destroyed after replacement. 
  14.    * 用應用程序中的另一頁替換當前頁。替換后,當前頁面將被銷毀。 
  15.    * @param obj 
  16.    */ 
  17.   static replace(obj: RouterOptions): void; 
  18.  
  19.   /** 
  20.    * Returns to the previous page or a specified page. 
  21.    * 返回上一頁或指定頁。 
  22.    * @param obj 
  23.    */ 
  24.   static back(obj?: BackRouterOptions): void; 
  25.  
  26.   /** 
  27.    * Clears all historical pages and retains only the current page at the top of the stack. 
  28.    * 清除所有歷史頁面,并在堆棧頂部僅保留當前頁面。 
  29.    */ 
  30.   static clear(): void; 
  31.  
  32.   /** 
  33.    * Obtains the number of pages in the current stack. 
  34.    * 獲取當前堆棧中的頁數。 
  35.    * @returns Number of pages in the stack. The maximum value is 32. 
  36.    */ 
  37.   static getLength(): string; 
  38.  
  39.   /** 
  40.    * Obtains information about the current page state. 
  41.    * 獲取有關當前頁面狀態(tài)的信息。 
  42.    * @returns Page state. 
  43.    */ 
  44.   static getState(): RouterState; 

出入棧與方法的對應

  • push:新頁面入棧
  • back:當前頁面出棧
  • replace:把當前頁面出棧、替換的新頁面入棧
  • clear:把當前頁面以下的所有頁面都出棧

(3)實現(xiàn)index頁面跳轉到secpage頁面

index.js中實現(xiàn)跳轉代碼

  1. //index.js 
  2. //導入router模塊 
  3. import router from '@system.router'
  4. export default { 
  5.     data: { 
  6.         harmony:null 
  7.     }, 
  8.     onInit() { 
  9.         this.harmony ="董昱老師YYDS" 
  10.  
  11.     }, 
  12.     //跳轉到secpage的方法 
  13.     toSecPage(){ 
  14.     //通過push方法入棧 
  15.         router.push({ 
  16.             //指定跳轉位置 
  17.             uri:'pages/index/secpages/secpages'
  18.             //傳遞數據 
  19.             params:{ 
  20.                 harmony: this.harmony 
  21.             } 
  22.         }); 
  23.     } 

進行一些基本的設置以后,動圖奉上!

(4)使用被傳遞的數據,并實現(xiàn)從SecPage返回index

在secpage.js里接收index傳過來數據,并通過console.info(message)方法將字符串變量以HiLog的形式輸出

  1. //secpage.js 
  2. import router from '@system.router'
  3. export default { 
  4.     data: { 
  5.         title: '跳轉成功' 
  6.     }, 
  7.     onInit(){ 
  8.         //輸出剛被傳遞出來的Harmony字符串 
  9.         console.info(this.harmony); 
  10.     }, 
  11.     back(){ 
  12.         router.back(); 
  13.     } 

5.1.5 頁面的生命周期函數

這一塊兒,書中沒有官方文檔講得詳細,圖解也沒有那么易懂,所以采取的互相補充的方式

HarmonyOS官方文檔-JS API參考-手機、平板、智能屏和智能穿戴開發(fā)-框架說明-生命周期

(1)頁面生命周期(總結+補充)

頁面生命周期(書中只講了前5個即從初始化到銷毀的生命周期)

(2)頁面A的生命周期接口的調用順序

  • 打開頁面A:onInit() -> onReady() -> onShow()
  • 在頁面A打開頁面B:onHide()
  • 從頁面B返回頁面A:onShow()
  • 退出頁面A:onBackPress() -> onHide() -> onDestroy()
  • 頁面隱藏到后臺運行:onInactive() -> onHide()
  • 頁面從后臺運行恢復到前臺:onShow() -> onActive()

注意:

  • 調用生命周期函數,可以通過conslole.info()進行打印
  • 通過onBackPress()方法監(jiān)聽系統(tǒng)返回事件
  • 一個完整的頁面生命周期中,至少會被調用一次,并且onInit() 、onReady()、onDestroy()僅能被調用一次

(3)Java UI中與JS UI中Page Ability的對比(補充)

相關官方文檔

JS UI

Java UI

Page的組成單元

  • Java UI中是AbilitySlice(AbilitySlice主要用于承載單個頁面的具體邏輯實現(xiàn)和界面UI,是應用顯示、運行和跳轉的最小單元)
  • JS UI中是JavaScript實例(見5.1.1)

組成單元的生命周期與Page Ability的生命周期

組成單元的生命周期依托于Page的生命周期。組成單元的生命周期與Page的相應回調類似,但組成單元還具有獨立于Page的生命周期變化,如同一Page中的AbilitySlice之間導航時,此時Page的生命周期狀態(tài)不會改變。

圖解

Java UI

Js UI

5.1.6 應用對象(應用生命周期)

(1)應用生命周期(4個)

注意

  • 在任何一個頁面中,通過this.$app代碼即可獲取當前的應用對象,應用對象應用自身的生命周期,開發(fā)者可以在應用對象中實現(xiàn)JavaScript全局變量。
  • 在onCreate()、onDestroy()兩種方法中可以實現(xiàn)數據庫的管理,例如:在前者方法中執(zhí)行一些初始化操作(網絡連接、賬號檢查)、在后者方法中檢查數據庫是否關閉,如果未關閉則要立即關閉。

(2)共享應用對象的變量(全局變量)

應用對象是一個單例,在應用對象中定義的變量可以在所有頁面中進行調用。

在app.js中添加1個變量jumpCount,用于記錄用戶的頁面跳轉次數,然后創(chuàng)建該變量的Get/Set方法

  1. //app.js 
  2. export default { 
  3.     data:{ 
  4.         jumpCount:null 
  5.     }, 
  6.     //獲取頁面跳轉次數 
  7.     getJumpCount(){ 
  8.         return this.jumpCount; 
  9.     }, 
  10.     //設置頁面的跳轉次數 
  11.     setJumcount(){ 
  12.         this.jumpCount =count
  13.     }, 
  14.     //頁面的跳轉次數 +1 
  15.     increaseJumpCount(){ 
  16.         this.jumpCount ++; 
  17.     }, 
  18.     onCreate() { 
  19.         this.jumpCount =0; //初始化頁面的跳轉次數為0 
  20.         console.info('AceApplication onCreate'); 
  21.     }, 
  22.     onDestroy() { 
  23.         console.info('AceApplication onDestroy'); 
  24.     } 
  25. }; 

對index.js和secpage.js進行相應的設置最后的日志

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關推薦

2011-05-06 08:41:33

UI設計應用程序iPad

2011-02-22 10:23:43

2010-12-10 10:08:24

2012-02-16 10:31:02

AndroidWeb App官方文檔

2012-04-04 22:10:14

UI

2020-10-10 10:30:31

JavaScript開發(fā)技術

2014-01-16 16:53:53

storm事務一致性

2013-02-21 14:15:41

開發(fā)Tizen

2013-02-21 14:14:40

開發(fā)Tizen

2017-01-15 15:02:42

JavaScript移動應用開發(fā)框架

2012-02-08 15:06:31

ibmdw

2022-09-19 00:37:13

SaaS云計算開發(fā)

2010-11-23 09:06:37

Web應用程序

2010-03-02 13:06:22

SilverLight

2013-01-11 15:36:09

iOS開發(fā)移動應用iPhone

2020-12-28 14:40:47

云計算云應用SaaS

2013-11-19 15:35:01

2012-01-13 10:31:25

ibmdw

2011-12-23 10:01:29

2018-12-11 11:41:14

物聯(lián)網應用程序IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频网 | 精品国产乱码久久久久久闺蜜 | 女女百合av大片一区二区三区九县 | 亚洲美女网站 | 欧美激情欧美激情在线五月 | 久久精品综合 | 国产精品久久久久久久白浊 | av天天看| 成年免费大片黄在线观看一级 | 国产精品日日做人人爱 | 人人操日日干 | 国产乱一区二区三区视频 | 国产一级特黄真人毛片 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 成年人在线视频 | 欧美日韩中文字幕在线播放 | 精品一区二区三区免费视频 | 在线免费观看黄色av | 国产精品一区二区三区久久久 | julia中文字幕久久一区二区 | 99精品免费| 999热在线视频 | 亚洲一区中文字幕在线观看 | 欧美九九九 | 欧美一区不卡 | 在线播放亚洲 | 亚洲视频在线观看一区二区三区 | 午夜在线小视频 | 国产精品夜间视频香蕉 | 成人午夜视频在线观看 | 午夜视频在线观看一区二区 | 日韩三级免费网站 | 国产欧美精品区一区二区三区 | av影音资源 | 亚洲精品视频在线看 | 国产精品久久久久久久毛片 | 免费a大片 | www.9191| 奇米四色在线观看 | 久久成人精品一区二区三区 | 丁香婷婷在线视频 |