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

鸿蒙开发基础

页面跳转

了解代码初始结构

/**
 * 装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊的含义。
 * @Entry:表示该自定义组件为入口组件
*  @Component:表示自定义组件
 * @State:表示组件中的状态变量,状态变量变化会触发UI刷新
 */
@Entry
@Component
/**
 * HarmonyOS是组件化开发
 * struct Index{}:自定义组件,可复用的UI单元,可组合其他组件
 */
struct Index {
 @State message: string = 'Hello World'
 /**
  * UI描述
  * build(){}:以声明式的方式来描述UI的结构
  */
 build() {
  /**
   * 系统组件
   * Row/Column/Text:有ArkUI提供的组件
   *  - 容器组件:用来完成布局,例如:Row/Column
   *  - 基础组件:自带样式功能的页面元素,例如:Text
   */
  Row() {
   Column() {
    Text(this.message)
     /**
      * 属性方法:设置组件的UI样式,方法比较多,后面在慢慢讲解
      */
      .fontSize(50)
      .fontWeight(FontWeight.Bold)
      .fontColor(Color.Red)
    }
    .width('100%')
   }
   .height('100%')
  }
}

实现跳转

pages/Index.ets

import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  // 跳转
  goToAbout = () => {
    router.pushUrl({
      url: 'pages/About'
    }).then(() => {
      console.info('跳转成功')
    }).catch((error: BusinessError) => {
      console.info('跳转失败',`Code is ${error.code}, message is ${error.message}`)
    })
  }

  build() {
    Row() {
      Column() {
        // 文本
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)
        // 按钮
        Button() {
          Text('Next')
            .fontSize(30)
            .fontWeight(FontWeight.Medium)
            .padding(10)
            .fontColor(Color.White)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 30
        })
        .backgroundColor('#0D9FFB')
        .width('40%')
        .height('10%')
        .onClick(() => this.goToAbout())
      }
      .width('100%')
    }
    .height('100%')
  }
}

新建第二个页面文件。在“Project”窗口,打开“entry > src > main > ets ”,右键点击“pages”文件夹,选择“New > ArkTS File”,命名为“About”,点击“Finish”。

pages/About.ets

import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct About {
  @State message: string = 'Hi there'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button() {
          Text('Back')
            .fontSize(25)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#0D9FFB')
        .width('40%')
        .height('5%')
        .onClick(() => {
          router.pushUrl({
            url: 'pages/Index'
          }).then(() => {
            console.info('跳转成功')
          }).catch((error: BusinessError) => {
            console.info('跳转失败',`Code is ${error.code}, message is ${error.message}`)
          })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

配置第二个页面的路由。在“Project”窗口,打开“entry > src > main > resources > base > profile”,在main_pages.json文件中的"src"下配置第二个页面的路由"pages/About"

{
  "src": [
    "pages/Index",
    "pages/About"
  ]
}

效果:

自定义组件

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。

自定义组件特点

  • 可组合:允许开发者组合使用系统组件、及其属性和方法。
  • 可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。
  • 数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。

自定义组件的基本用法

我们可以在 ets目录下新建 components子目录,专门用来存放公共组件跟vue类似

CounterComponent.ets

@Component
export default struct CounterComponent {
  @State
  message: string = 'Hello, Counter!';



  build() {
    // CounterCompoennt自定义组件组合系统组件Row和Text
    Row() {
      Text(this.message)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        .onClick(() => {
          // 状态变量message的改变驱动UI刷新,UI从'Hello, Counter!'刷新为'Hello, ArkUI!'
          this.message = 'Hello, ArkUI!';
        })
    }
  }
}

温馨提示

如果在另外的文件中引用该自定义组件,需要使用export关键字导出,并在使用的页面import该自定义组件

// 组件文件中
export default CounterComponent
// 使用组件文件中
import CounterComponent from "../components/CounterComponent"

这里我们接着上面的继续,Index.ets中引入并使用

// 使用组件文件中
import CounterComponent from "../components/CounterComponent";

那么我们是否可以通过在组件中引入并且传入不同的参数呢?答案是可以的

Index.ets中类似于下面操作

CounterComponent({message: 'hello keyword one'})
CounterComponent({message: 'hello keyword two'})

然后我们便可以看到效果


http://www.kler.cn/a/306919.html

相关文章:

  • 障碍检测与避障控制 ROS2机器人
  • Java API类与接口:类的转换方法与正则表达式
  • 数据重塑:长宽数据转换【基于tidyr】
  • Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
  • 计算机毕业设计Python+图神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习 深度学习
  • SDL线程
  • Rust Web开发框架对比:Warp与Actix-web
  • SpringBoot + MySQL + MyBatis 实操示例教学
  • 从冯唐的成事心法 看SAP协助企业战略落地到信息化
  • 车载软件架构 --- SOA设计与应用(上)
  • DAY20240913 VUE:深入解析 Vue Router 局部路由守卫:路由独享与组件内部守卫的妙用与区别
  • 自修C++PrimerPlus--类型转换、右值引用、引用中的类对象
  • 虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统
  • C++实现unordered_map和unordered_set
  • 【Kafka】分区与复制机制:解锁高性能与容错的密钥
  • 交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输
  • VBA V3高级视频行为分析系统(含源码)
  • 数据库系统 第52节 数据库日志和恢复
  • 用Matlab求解绘制2D散点(x y)数据的最小外接圆、沿轴外接矩形
  • 代码随想录算法训练营第48天 | LeetCode739.每日温度、 LeetCode496.下一个更大元素I、 LeetCode503.下一个更大元素II
  • Linux 之 RPM [Red - Hat Package Manager]【包管理】
  • JavaScript 事件处理
  • Gateway Timeout504: 网关超时的完美解决方法
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel() 源码分析
  • 【Webpack--007】处理其他资源--视频音频
  • PostgreSQL - tutorial