当前位置: 首页 > news >正文

HarmonyOS NEXT系列之元服务框架ASCF

元服务ASCF框架

  • 〇、前言
  • 一、认识 ASCF 项目
    • 1、工程目录结构
    • 2、ascf_src 目录
      • 2.1、pages 子目录
        • 2.1.1、HXML
        • 2.1.2、CSS
        • 2.1.3、js
        • 2.1.4、json
      • 2.2、component 子目录
    • 3、rawfile 目录
    • 4、部署运行
  • 三、总结

〇、前言

在这里插入图片描述
在鸿蒙开发者平台下载中心页面,自下半年开始,多了一个 ASCF plugin的下载项,这是一个 DevEco Studio 插件,而该插件的主要作用就是让 IDE 支持使用 ASCF 框架进行元服务开发,并引入相应的项目模板:
在这里插入图片描述

一、认识 ASCF 项目

下面从工程目录结构、页面实现和编译运行三个方面入手,对 ASCF 项目进行认识。

1、工程目录结构

在这里插入图片描述
与普通的 HarmonyOS NEXT 项目相比,ASCF 项目明显多了一个 ascf 目录,同时,entry 模块的 resources 目录下的 rawfile 目录下内容与 ascf 目录中的内容很相似,而实际上这两者也是相互关联的。

2、ascf_src 目录

在 ASCF 框架中,真正的源码目录不再是 entry 模块的 src 目录,而是 ascf_src 目录,之所以这样说,只需浏览下 entry/src/main/ets/pages/Index.ets 中的内容:
在这里插入图片描述
就知道真正描述页面实现的代码,已经不在此处。

ascf_src 目录分为 pages 目录和 component 目录,以及app.js 和 app.json 文件,app.json 文件是配置文件,控制的是应用级别的配置;app.js 文件存放实现应用级别功能逻辑的 js 代码;pages 目录下每个子目录对应一个应用页面,子目录名称通常与页面名称保持一致,如起始页 index;component 下的子目录对应一个自定义 Component。

pages 子目录和 component 子目录,两者中的内容都是有 .hxml、.css、.js 和 .json 组成。

2.1、pages 子目录

以 index 页面对应 index 目录为例,讲解 ASCF 框架中如何实现一个应用页面。

pages 子目录不是随意创建的,它是根据 entry 模块 pages 目录中定义的 pages 去扩展的,或者说,在 entry 模块的 main_pages.json 文件中定义了几个页面,ascf/ascf_src/pages 中就可以创建几个子目录:
在这里插入图片描述
而 ascf/ascf_src/app.json 文件中定义的 URL,也需要保持一致:
在这里插入图片描述
一个 ASCF Page 由 hxml、CSS、js 和 json 共同实现,具体作用如下:

2.1.1、HXML

首先,看一下 HXML 文件的内容:

<view class="content"><text class="title">{{ message }}</text><view class="btn_container"><button class="btn_black" bindtap="showToast"><text>按钮</text></button></view><view class="btn_container"><button class="btn_black" bindtap="newtPage"><text>Next</text></button></view><view><testComponent><view>这里是插入到组件slot中的内容</view></testComponent></view>
</view>

可以看出,HXML 与 HTML 类似,通过元素标签进行视图内容的构建,因此,可以看作是页面结构的描述文件。

2.1.2、CSS

ASCF 框架中的 CSS 文件,跟一般的 Web 项目或者说 H5 项目的 CSS 文件一样,就是层叠样式表:

.content {padding: 100rpx 0;text-align: start;
}.title {font-size: 72rpx;color: #000000;font-weight: 600;
}page {height: 100%;width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: flex-start;
}.btn_container {width: 100%;height: 80rpx;margin-top: 20rpx;ddisplay: flex;flex-direction: row;align-items: center;justify-content: center;text-align: center;
}
.btn_black {background-color: #000000;color: #ffffff;width: 180rpx;height: 100%;text-align: center;
}

也所以,CSS 文件理所当然就是页面样式的描述文件。

2.1.3、js

index.js 文件,实际上就是 index 页面的交互逻辑的描述文件:

Page({data: {message: '这里是第一页',},showToast: function(event) {has.showToast({title: '点击了按钮',duration: 5000,})},myEventListener(e){console.log(e.detail) // 自定义组件触发事件时提供的detail对象},newtPage(){has.navigateTo({url: "/pages/second/second",success(res) {console.log('success: ', res);},fail(res) {console.log('fail: ', res);},complete(res) {console.log('complete: ', res);}});}
});

如果是自定义 Component,那么 js 脚本中最外层就是 Component:
在这里插入图片描述

2.1.4、json

json 文件就是对应页面或自定义组件的配置文件,对于 page 类型的 json 文件,内容通常如下:

{"navigationBarTitleText": "Home","usingComponents": {"testComponent": "../../components/testComponent/testComponent"}
}

navigationBarTitleText 设置页面标题,usingComponents 用于引入在页面中要使用的自定义组件。

2.2、component 子目录

component 和 page 一样也是由 hxml、CSS、js 和 json 共同组成,而成为 component,除了 js 中要使用 component 函数外,json 文件必须写上代码语句:

{ "component": true}

之后,剩下的跟 page 没有太大区别,比如 testComponent.hxml:

<view class="content"><view><text>下面是组件内部节点:</text></view><text class="title">{{msg}}</text><view class="btn_container"><button class="btn_black" bindTap="tapTestComponent"><text>{{btnText}}</text></button></view><view><text>下面是传入组件的外部节点:</text></view><slot></slot>
</view>

3、rawfile 目录

在这里插入图片描述
仔细看 ASCF 项目的 entry/src/main/resources/rawfile,就会发现和 ascf_src 目录存在映射关系,实际上,rawfile 中的内容就是 ascf_src 目录的打包:
在这里插入图片描述

4、部署运行

ASCF 项目就是 HarmonyOS NEXT 元服务项目,而元服务是一种轻量的应用,支持免安装运行,使用真机部署的情况下,跟app一样需要配置上签名证书。

在我自己的手机部署后,page 中使用的按钮都能正常捕获到点击事件,而自定义组件中的按钮却捕获不到,目前还不清楚具体为什么。

三、总结

ASCF 框架,总体上与 Vue 等前端框架比较类似,因此,对于习惯 WebApp 的开发者来说,使用 ASCF 框架开发元服务,要比使用 ArkTS 开发元服务更容易上手,但代价就是失去了 ArkTS 的简洁——在我看来,ASCF 就是将 ArkTS 一拆四,用四个脚本文件去完成页面实现。

http://www.dtcms.com/a/348405.html

相关文章:

  • 波兰密码破译机bomba:二战密码战的隐形功臣
  • 深入OpenHarmony OTA硬核升级
  • ComfyUI ZLUDA AMD conda 使用遇到的问题
  • stm32温控大棚测控系统(CO2+温湿度+光照)+仿真
  • Docker 容器(一)
  • 【ansible】5.在受管主机部署文件和Jinja2模板
  • 信誉代币的发行和管理机制是怎样的?
  • 基于角色的访问控制(RBAC)研究与Go语言实现
  • overleaf关于给参考文献添加DOI链接的问题
  • B站视频字幕提取工具
  • 当GitHub“断网”:从应急到终极方案,手把手搭建永不宕机的代码协作体系
  • 鸿蒙 ArkTS 开发:Number、Boolean、String 三种核心基本数据类型详解(附实战案例)
  • 从 Unity UGUI 到 Unreal UMG 的无缝迁移:UMG 基础与 UI 控件布局
  • Java的数字计算
  • pycharm的matplotlib不显示动图问题的解决
  • Python核心技术开发指南(004)——配置PyCharm
  • Flink直接缓冲存储器异常解析与解决方案
  • 力扣155.最小栈
  • 嵌入式知识篇---32GUI
  • 神经网络|(十四)概率论基础知识-协方差和方差
  • 使用 Golang 的 Gin 框架实现一周极限编程计划:全网 AIGC 项目热点追踪应用
  • 自然语言处理——06 迁移学习(下)
  • 自然语言处理——06 迁移学习(中)
  • RockyLinux9.6安装k8s
  • 【(含模板)滑动窗口 - LeetCode】3. 无重复字符的最长子串
  • 从“小麻烦”到“大难题”:Spring Boot 配置文件的坑与解
  • UE5游戏开发的理想硬件配置指南:从入门到专业级方案
  • MySQL视图有什么用?一文读懂虚拟表的六大核心价值
  • 数据治理进阶——埃森哲 数据治理元数据管理建设规划方案【附全文阅读】
  • LabVIEW Vision视觉引导撑簧圈智能插装