鴻蒙OS JS FA概述

2020-09-18 12:02 更新

JS UI 框架支持純 JavaScript、JavaScript 和 Java 混合語(yǔ)言開(kāi)發(fā)。JS FA 指基于 JavaScript 或 JavaScript 和 Java混合開(kāi)發(fā)的 FA,下面主要介紹:JS FA 在 HarmonyOS 上運(yùn)行時(shí)需要的基類(lèi) AceAbility、加載 JS FA 主體的方法、JS FA 開(kāi)發(fā)目錄。

AceAbility

AceAbility 類(lèi)是 JS FA 在 HarmonyOS 上運(yùn)行環(huán)境的基類(lèi),繼承自 Ability。開(kāi)發(fā)者的應(yīng)用運(yùn)行入口類(lèi)應(yīng)該從該類(lèi)派生,代碼示例如下:

  1. public class MainAbility extends AceAbility {
  2. @Override
  3. public void onStart(Intent intent) {
  4. super.onStart(intent);
  5. }
  6. @Override
  7. public void onStop() {
  8. super.onStop();
  9. }
  10. }

如何加載 JS FA

JS FA 生命周期事件分為應(yīng)用生命周期和頁(yè)面生命周期,應(yīng)用通過(guò) AceAbility 類(lèi)中setInstanceName() 接口設(shè)置該 Ability 的實(shí)例資源,并通過(guò) AceAbility 窗口進(jìn)行顯示以及全局應(yīng)用生命周期管理。

setInstanceName(String name)的參數(shù)“name”指實(shí)例名稱(chēng),實(shí)例名稱(chēng)與config.json 文件中 profile.application.js.name 的值對(duì)應(yīng)。若開(kāi)發(fā)者未修改實(shí)例名,而使用了缺省值 default,則無(wú)需調(diào)用此接口。若開(kāi)發(fā)者修改了實(shí)例名,則需在應(yīng)用 Ability 實(shí)例的 onStart()中調(diào)用此接口,并將參數(shù)“name”設(shè)置為修改后的實(shí)例名稱(chēng)。

說(shuō)明

多實(shí)例應(yīng)用的 profile.application.js 字段中有多個(gè)實(shí)例項(xiàng),使用時(shí)請(qǐng)選擇相應(yīng)的實(shí)例名稱(chēng)。

setInstanceName() 接口使用方法:在 MainAbility 的 onStart() 中的 super.onStart() 前調(diào)用此接口。以 JSComponentName 作為實(shí)例名稱(chēng),代碼示例如下:

  1. public class MainAbility extends AceAbility {
  2. @Override
  3. public void onStart(Intent intent) {
  4. setInstanceName("JSComponentName"); // config.json配置文件中ability.js.name的標(biāo)簽值。
  5. super.onStart(intent);
  6. }
  7. }

說(shuō)明

需在 super.onStart(Intent) 前調(diào)用此接口。

JS FA開(kāi)發(fā)目錄

新建工程的 JS 目錄如下圖所示。

img

在工程目錄中:common 文件夾主要存放公共資源,如圖片、視頻等;i18n 下存放多語(yǔ)言的 json 文件;pages 文件夾下存放多個(gè)頁(yè)面,每個(gè)頁(yè)面由 hml、css 和 js 文件組成。

  • main > js > default > i18n > en-US.json:

此文件定義了在英文模式下頁(yè)面顯示的變量?jī)?nèi)容。同理,zh-CN.json 中定義了中文模式下的頁(yè)面內(nèi)容。

  1. {
  2. "strings": {
  3. "hello": "Hello",
  4. "world": "World"
  5. },
  6. "files": {
  7. }
  8. }

  • main > js > default > pages > index > index.hml:

此文件定義了 index 頁(yè)面的布局、index 頁(yè)面中用到的組件,以及這些組件的層級(jí)關(guān)系。例如:index.hml 文件中包含了一個(gè) text 組件,內(nèi)容為 “Hello World” 文本。

  1. <div class ="container">
  2. <text class ="title">
  3. {{ $t('strings.hello') }} {{title}}
  4. </text>
  5. </div>

  • main > js > default > pages > index > index.css:

此文件定義了 index 頁(yè)面的樣式。例如:index.css 文件定義了“container”和 “title” 的樣式。

  1. .container {
  2. flex-direction: column;
  3. justify-content: center;
  4. align-items: center;
  5. }
  6. .title {
  7. font-size: 100px;
  8. }

  • main > js > default > pages > index > index.js:

此文件定義了 index 頁(yè)面的業(yè)務(wù)邏輯,比如數(shù)據(jù)綁定、事件處理等。例如:變量 “title”賦值為字符串 “World” 。

  1. export default {
  2. data: {
  3. title: '',
  4. },
  5. onInit() {
  6. this.title = this.$t('strings.world');
  7. },
  8. }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)