当前位置:   article > 正文

详细教程 - 进阶版 鸿蒙harmonyOS应用 第十四节——鸿蒙JS UI框架详解_harmony中的js是什么

harmony中的js是什么

1. JS UI框架介绍

        JS UI是鸿蒙系统推荐的UI开发框架,使用JavaScript语言编写,通过JS API提供界面渲染和组件能力。

1.1 特性概述

  • 跨平台:支持HarmonyOS和Android两套框架
  • 声明式:通过XML方式定义页面结构
  • 高性能:深度框架层间优化,确保流畅体验
  • 丰富组件:拥有丰富的基础组件和布局容器
  • 数据驱动:通过数据绑定实现视图和状态同步

1.2 架构设计

JS UI框架分为JS Framework层、JS Render层、Native Engine层三层架构

  • JS Framework:JS能力封装,组件化开发
  • JS Render:核心渲染引擎,性能优化
  • Native Engine:多端引擎适配,通用布局算法

三层解耦,翻译多端引擎指令,高效渲染UI。

2. 快速上手

下面通过Hello World示例,介绍JS UI的基础用法。

2.1 引入JS API

import ui from '@ohos.ui'

2.2 代码结构

  1. @Entry
  2. @Component
  3. struct HelloWorld {
  4. build() {
  5. Column() {
  6. Text('Hello World')
  7. .fontSize(50)
  8. .fontWeight(FontWeight.Bold)
  9. }
  10. .width('100%')
  11. .height('100%')
  12. }
  13. }

可见,通过声明式语法构建页面,非常简洁高效。接下来将深入JS UI的其他能力。

3. 布局容器

JS UI框架提供多种布局容器,用于构建页面的基础布局结构。

3.1 Stack 栈布局

Stack以垂直方向线性排列子元素,常用于简单的内容展示。

  1. Stack() {
  2. Text('Title').fontSize(30)
  3. Image('/images/img.png')
  4. }

3.2 List 列表布局

List 支持横向或纵向列表展示,可配置滚动效果。

  1. List() {
  2. ForEach(dataList) {
  3. Text($item.name)
  4. }
  5. }
  6. .listDirection(Axis.Vertical)
  7. .scrollable(true)

3.3 Row/Column

Row和Column用于水平和垂直排列子元素。

4. 常用组件

组件是构建界面不可或缺的元素,JS UI提供丰富的基础组件。

4.1 Text

用于显示和格式化文本。

  1. Text('内容')
  2. .fontSize(20)
  3. .fontWeight(800)
  4. .fontFamily('cursive')

4.2 Image

用于展示图片资源。

  1. Image($imgSrc)
  2. .width(300)
  3. .height(240)
  4. .objectFit(ImageFit.Contain)

4.3 Input

用于文本输入。nput支持丰富的事件如change、focus等。

  1. Input()
  2. .placeholder('请输入')
  3. .fontSize(16)
  4. .onChange((value) => {})

5. 组件封装

我们可以基于基础组件封装成新组件,实现复用。

5.1 定义组件

使用@Component装饰器定义组件类。

  1. @Component
  2. export default class Title extends Component {
  3. build() {
  4. Column() {
  5. ...
  6. }
  7. }
  8. }

5.2 引用组件

  1. @Entry
  2. @Component
  3. struct Page {
  4. build() {
  5. Title()
  6. }
  7. }

5.3 传参和事件

自定义事件与参数。

  1. @Component
  2. export default class Title extends Component {
  3. build() {
  4. Text(){this.props.title}
  5. }
  6. onClick() {
  7. this.fireEvent('titleClick')
  8. }
  9. }
  10. // 使用
  11. Title({title:"标题"})
  12. .onClick(() => {})

6. 样式调整

UI样式通过Style API进行统一调整。

6.1 内联样式

  1. Text()
  2. .style({
  3. fontSize: 30,
  4. color: '#FF0000'
  5. })

6.2 全局样式表

  1. // styles.css
  2. text {
  3. font-size: 30px;
  4. color: red;
  5. }
  1. // index.js
  2. import './styles.css'

7. 数据绑定

JS UI框架通过数据绑定实现视图和状态同步。

7.1 绑定表达式

  1. @Entry
  2. @Component
  3. struct Demo {
  4. build() {
  5. Column() {
  6. Text(`Count: {{count}}`)
  7. Button()
  8. .onClick(() => {
  9. this.count++
  10. })
  11. }
  12. }
  13. data = {
  14. count: 0
  15. }
  16. }

通过{{ }}绑定数据变量。

7.2 观察者模式

  1. @Entry
  2. @Component
  3. struct Demo {
  4. build() {
  5. Column() {
  6. Input{
  7. this.text
  8. }.onChange((val) => {
  9. this.text = val
  10. })
  11. Text('输入的是:{{text}}')
  12. }
  13. }
  14. data = {
  15. text: ''
  16. }
  17. }

实现双向绑定,数据和视图同步更新。

8. 页面路由

页面路由用于管理页面入口与页面栈。

8.1 配置路由表

  1. // router.js
  2. export default [
  3. {
  4. path: '/index',
  5. component: 'index'
  6. },
  7. {
  8. path: '/detail',
  9. component: 'detail'
  10. }
  11. ]

8.2 触发路由

  1. import router from './router'
  2. router.push({
  3. uri: '/detail',
  4. params: {
  5. id: 123
  6. }
  7. })

9. 动画效果

JS UI框架通过动画API启用组件动画。

9.1 补间动画

补间动画依赖时间线变换属性。

  1. // Opacity渐变
  2. animateTo({
  3. duration: 1000,
  4. fillMode: 'forwards',
  5. easing: 'friction',
  6. animations: {
  7. opacity: [0, 1],
  8. }
  9. })

9.2 动画队列

  1. // 顺序执行多个动画
  2. animateTo({
  3. duration: 1000,
  4. animations: [
  5. {opacity: 0},
  6. {opacity: 1},
  7. ]
  8. })

9.3 自定义驱动

  1. // 自定义时间函数
  2. animateTo(
  3. 1000,
  4. (progress) => {
  5. this.width = progress * 500
  6. }
  7. )

10. 应用打包

生成hap包,进行应用签名和部署。

10.1 打包命令

  1. # 打包生成hap
  2. $ hap build -t debug
  3. # 安装hap包
  4. $ hap install -t debug

10.2 Signature签名

打开DevEco Studio,在项目签名选项中配置签名证书,选择证书对hap进行签名。

11. 最佳实践

11.1 组件化

按功能拆分可复用组件,提高开发效率。可参考前面课程

11.2 跨端兼容

通过编译指令实现条件编译,解决API差异。

  1. // #if %api('system.prompt')
  2. import prompt from '@system.prompt';
  3. // #else
  4. import prompt from '@ohos.prompt';
  5. // #endif

11.3 单元测试

基于JSUnit框架编写组件单元测试。

  1. @Test
  2. testButton() {
  3. let button = new Button();
  4. assert(button !== null);
  5. }

11.4 UI自动化

通过UI Automator API实现界面自动化测试。

12. 总结

        JS UI框架为鸿蒙应用提供了高效的UI开发手段。相比其他框架,它具有性能高、多端适配等优势。通过掌握其声明式语法、数据驱动等特性,可以快速构建出色的应用界面。

        ·这里对JS UI的各种能力进行了全面介绍,同时提供了最佳实践指导。希望本文可以帮助开发者深入理解和应用JS UI框架,构建跨平台的高质量应用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/221087
推荐阅读
相关标签
  

闽ICP备14008679号