HarmonyOS NEXT星河版零基础入门(2)

news2024/11/26 4:24:56

1.Scroll滚动容器-核心用法

1(1).Scroll的核心用法

快速得到一个长度为5的数组

Array.from({length:5})

代码:

这种是默认是竖向的  要是想要实现横向的 就得把Scroll里边的Column改为Row组件  并且把scrolllable设置为Horizontal横向

1(2).Scroll的常见属性

代码部分

1(3).滚动容器Scroll-控制器

代码:

1(3).滚动容器Scroll-Scroll事件

2.容器组件Tabs

2.1Tabs的基本用法

代码

2.2Tabs的常用属性

代码

2.3滚动导航栏

代码:

2.4自定义TabBar

案例代码

 2.5自定义TabBar-高亮切换

代码:

高亮部分代码

逻辑:传参需要新增它本身的下标 和选中的图片  如果在切换时 那个选中的图标==我们现在这个本身的图标  那就相当于选中的就是这个状态 那么我们需要将高亮的字体设置为红色 图片我们就用传进来的选中的图片

3.class类

3.1class类的 实例属性方法(字段)

代码:

3.2class类的 构造函数

代码:

代码结构比较复杂时  我们就可以基于接口传一个对象

3.3class类-定义方法&静态方法&静态属性
      类定义的方法是实例可以访问的  

      类定义的 静态方法和属性是给本身这个类添加的不会去随便变得
3.4class类-继承extends和super关键字
类的继承

代码:

若是子类想要重写父类的方法  只需在子类中提供同名的方法即可

这样打印出来的就是子类中的sayHi()

若是还想要继承父类中的方法或属性或构造函数  就得用super

代码:

super获取父类方法

super获取父类的构造函数 

super获取父类属性

3.5class类-instanceof和typeof

typeof仅能用于简单类型的判断 ,复杂类型需要用instanceof判断

代码

3.6class类-类的修饰符
readonly修饰符

代码:

private修饰符

代码


protected修饰符

代码:

public修饰符

其实public是默认可不写的 

总结

4.剩余参数和展开运算符

剩余参数

代码

展开运算符

代码:

5 interface接口的继承和实现

5.1接口继承

代码:

5.2接口实现

代码:

6.泛型函数

6.1 泛型函数

类型可当参数传过去 看下图  左边那么多代码 右边几行就实现了

代码:

 练习

6.2 泛型约束

代码:

6.3多个泛型参数

代码:

6.4泛型接口

代码:

6.5泛型类

代码:

7、模块化语法

7.1模块化基本认知

7.2默认导出和导入

代码

7.3按需导出和导入

代码:

7.4全部导入

代码:

8.自定义组件基础

9.自定义组件-通用样式事件

10.自定义组件-成员函数变量

代码:

11.BuilderParam构建函数-传递UI(插槽)

代码:

11.1单个BuilderParam有两种传递方式

一种是按参数传递 参数的key要与子组件中定义的一致

一种是按照自定义组件外部传递 这种看起来更与插槽类似

@Entry
@Component
struct BuilderParamPage {
  @Builder
  First(){
    Image('https://img1.baidu.com/it/u=3631027001,3666368042&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500')
      .width(100)
      .height(100)
  }
  @Builder
  Two(){
    Button('我是点击按钮')
  }


  build() {
    Column() {
      SonBuilderParam({
        getContent:this.First,

      })
      SonBuilderParam(){
        Button('代付款')
      }
    }
    .height('100%')
    .width('100%')
    .backgroundColor(Color.Gray)
    .padding(20)
  }
}




@Component
struct SonBuilderParam {
  @Builder
  getDefault(){
    Text('我是默认内容')
  }
  @BuilderParam
  getContent:()=>void=this.getDefault


  build() {
    Column() {
this.getContent()
    }
    .height(200)
    .width('100%')
    .backgroundColor('#fff')
    .borderRadius(10)
    .padding(20)
    .margin({
      bottom:20
    })


  }
}

11.1多个BuilderParam怎么传递

代码:

@Entry
@Component
struct ManyBuilderParamPage {
  @Builder
  header() {
    Row() {
      Text('我是头部')
    }
    .width('100%')
    .backgroundColor(Color.Pink)
    .height(60)
  }

  @Builder
  Content() {
    Column() {
      Text('我是内容')

    }
    .width('100%')
    .backgroundColor(Color.Gray)
    .height(100)
  }

  build() {
    Column() {

      // SonManyBuilderParam() {
      //   this.header()
      //   this.Content()
      //
      // }
      SonManyBuilderParam({
        header:()=>{
          this.header()
        },
        Con:()=>{
          this.Content()
        }
      })



    }
    .height('100%')
    .width('100%')
    .backgroundColor(Color.Gray)
    .padding(20)
  }
}


@Component
struct SonManyBuilderParam {
  @Builder
  DefauteHeader() {
    Text('我是默認的')
  }

  @Builder
  DefauteCon() {
    Text('我是默認的')
  }

  @BuilderParam
  header: () => void = this.DefauteHeader

  @BuilderParam
  Con: () => void = this.DefauteCon

  build() {
    Column() {
      this.header()
      this.Con()


      Row() {
        Button('取消').onClick(() => {

        })
        Button('确定').onClick(() => {

        })
      }

    }
    .width('100%')
    .backgroundColor('#fff')
    .borderRadius(10)
    .padding(20)
    .margin({
      bottom: 20
    })

  }
}

看下效果图

11.2尾随闭包

尾随闭包就是父组件在子组件(){}后边写内容结构传过去  对面一个@BuilderParam接收 要满足两个条件

  • 只有一个builderParam的时候可以使用尾随闭包
  • 当builderParam没有参数传出的时候 可以用尾随闭包、

子组件:

@Component
struct DandelCom {
  @State dangleHeight: number = 200
  @BuilderParam
  one: () => void = this.aa

  @Builder
  aa() {
    Text('我是默认的方法')
  }

  build() {
    Column() {
      this.one()

    }
    .width('100%')
    .height(this.dangleHeight)
    .backgroundColor(Color.Gray)
  }
}

export { DandelCom }

父组件

import { DandelCom } from './components/DangleCom';

@Entry
@Component
struct DangleBuilderPage {
  @State message: string = 'Hello 尾随闭包';
  @State Pheight: number = 300

  build() {
    Column() {
      DandelCom({ dangleHeight: this.Pheight, }) {

        Button('哈咯')
          .width(100)
          .height(60)
        Button('哈咯2')
          .width(100)
          .height(60)
        Button('哈咯3')
          .width(100)
          .height(60)


      }
    }
    .height('100%')
    .width('100%')
  }
}

   

12.状态管理

概述

@State

1.简单类型 直接修改

2.复杂类型  只能检测到第一层 Object.Keys()

@prop

prop传值是单向传递 通常不会在子组件修改prop值  因为父组件一旦变化 会自动同步子组件

若实在想更新   希望保证父子同步=>调用父组件传递过来的方法

 @Link(双向同步)

 代码:

简单类型

看下子组件prop接收 只有子组件更改父组件不更改

看下Link 同步更新

复杂类型的第一层也是可以修改的

复杂类型的多层可以进行修改吗 

点击按钮无法修改  那怎样能修改的  修改它的第一层 看以下代码就能修改啦~

 

@provide和@Consume

代码:

@Observed&@ObjectLink嵌套对象数组 属性变化

代码:

observed必须定义在类上

13List组件

14.Iconfont字体图标的使用

 1.下载icon文件2.引入@ohos.font 3.在aboutApper中试用font.registerFont方法

4.使用字体

15.输入框的值如何实现双向绑定

16.数组如何进行排序(sort)

17.路由

1新建页面2种方式

新建的第2种方式要配路由

2页面的跳转和后退

3路由-页面栈

4 路由模式和路由传参

4.1 路由模式

代码使用

重复跳转的路由使用single模式就不会堆加在路由栈里

4.2 路由传参

代码:

18.生命周期

19.Stage模型

1. 修改应用管理下的图标和信息

代码:

1.

2.

3.

看下应用信息的效果

2. 修改桌面上的图标和信息

代码:

1.

2.点击icon下边的label进入

3.更改信息

4.重启

3. UIAbility组件

4. UIAbility生命周期

怎么设置默认启动的ability

5. 同模块拉起另一个UIAbility

返回一个promise对象 可以用来看返回信息

6. 跨模块拉起另一个UIAbility

跨模块编译的时候需要加个编译配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持

就在昨晚,Spring AI发了个比较重要的更新。由于最近OpenAI推出了结构化输出的功能,可确保 AI 生成的响应严格遵守预定义的 JSON 模式。此功能显着提高了人工智能生成内容在现实应用中的可靠性和可用性。Spring AI 紧随其后,现在也可以对OpenA…

如何在萤石云视频app转移设备

本文将详述如何在萤石云视频app转移设备 一. 注意事项 1. 若设备正在分享中,无法转移 2. 若设备已开通云存储等可以转移的增值服务,相应的服务也会转移;若开通了订阅服务将取消订阅服务,次月不再扣费续订 3. 转移设备时若设备…

【iOS】—— Runloop和多线程问题总结

Runloop和多线程问题总结 runloop总结1. runloop简介2. runloop的基本作用3. 获取runloop的流程4. runloop和线程的关系5. runloop中的Mode有几种以及作用6.runloop的事件源7. 讲一下source0和source18. runloop的六种观察者模式9. 针对定时器在滑动时停止工作的问题10. 如何解…

【pytorch学习】transforms的使用

1 ToTensor() 作用:将 PIL Image 类型或者 numpy.ndarray 类型转为 tensor 类型 实例: from torchvision import transforms from PIL import Imageimg_path "data/train/bees/17209602_fe5a5a746f.jpg" img Image.open(img_path)print(i…

[数据结构]-快速排序

学习快排的基础 不想自己推导时间复杂度或者了解随机化的合理性,可以忽视下面这一条. 推导时间复杂度的方法:主定理随机化算法—数学基础:概率统计 QuickSort 快速排序: 1962年,Tony Hoare发明了这种如此高效实用的强大排序算法 分治法的体现:Divide and Conquer原地排序,…

数据结构+二叉遍历算法的应用

一、问题描述 编写一个程序,先用二叉树表示一个简单算术表达式,树的每一个 结点包括一个运算符或运算数。在简单算术表达式中只包含、-、 *、/和一位正整数且格式正确(不包含括号),并且要按照先乘除后 加减的原则构造二叉树。如图 7.35 所示…

QT5生成独立运行的exe文件

目录 1 生成独立运行的exe文件1.1 设置工程Release版本可执行文件存储路径1.2 将工程编译成Release版本 2 使用QT5自带的windeployqt拷贝软件运行依赖项3 将程序打包成一个独立的可执行软件exe4 解决QT5 This application failed to start because no Qt platform plugin could…

批量快递中问题件筛选技巧大揭秘

批量快递中问题件筛选技巧大揭秘:固乔快递查询助手的强大功能 在电商行业日益繁荣的今天,快递服务成为了连接商家与消费者的关键纽带。然而,随着订单量的激增,如何高效处理并筛选出快递中的问题件,成为了许多商家面临…

shuishusihui

互斥量 使用互斥量可以用于保护某些临界资源,同一时间只能有一个任务来使用它。 使用互斥量会引入其他问题,比如说优先级反转,于是提出了优先级继承等方法解决问题 任务通知 任务通知就是通知任务,前边都是多对多的关系&#xff0…

算法解析——双指针算法(3)数据匹配

欢迎来到博主的专栏——算法解析 博主ID:代码小豪 文章目录 LCR179、查找总价格为目标值的两个商品leetcode11——盛水最多的容器leetcode611——有效三角形的个数 我们前面已经盘点了两种双指针算法的使用场景,现在来看看最常见的一种。 通常&#xff0…

社交电商系统开发功能定制

社交电商系统开发功能定制是一项综合性的服务,它涉及到需求分析、界面设计、功能开发、系统测试以及上线后的持续维护。以下是社交电商系统开发中应考虑的关键功能点: 需求分析和规划:开发前,企业需要明确业务需求,包…

【数据分析:一篇文章带你掌握Pandas高级可视化技巧】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析的数据可视化,本篇文章主要讲述了:掌握Pandas高级可视化技巧等等。欢迎大家一起探索讨论!!&#xff01…

docker的swarm技术

docker中swarm技术 docker swarm技术是docker社区提供的docker的集群管理调度工具,通过api来管理多个主机上的docker,通过overlay网络来实现不同主机之间容器的通信与访问。实现容器的调度,资源的分配,以及副本。 docker swarm中…

愛ㄉ粗麵體字體欣赏

愛ㄉ粗麵體字體字体欣赏,英文名AddaNoodle 下载到字体档后,首先打开字体文件预览看看,超可愛的~ 最近流行的可愛字體,VIVISTICKER-愛ㄉ粗麵體 QQ 軟軟的筆觸不只適合有溫度的限動 放在貼文或介紹文字都超級適合 還找不…

汇编语言指令 jmp: jmp word ptr、jmp dword ptr、jmp 寄存器、jmp 段地址:偏移地址

1. 转移地址在内存中的jmp指令有2种形式 1.1 jmp word ptr 内存单元地址 jmp word ptr 内存单元地址是段内转移指令,也就是说该指令只修改IP值,其功能是控制CPU下一条执行的指令是一个字(2个字节)内存中存放的偏移地址所指向的指…

【Python】函数入门(下)

3))* ** ​​​​​​注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…

家电行业实施数字工厂管理系统前要做好哪些准备

家电企业在实施数字工厂管理系统前,需要做好以下准备: 一、明确目标与需求 数字化转型目标:明确数字化转型的具体目标,如提高生产效率、降低生产成本、优化库存管理、提升产品质量等。这些目标将指导整个数字工厂管理系统的选择…

STM32学习笔记09-SPI通信

目录 SPI通信简介 硬件电路 移位示意图 SPI基本时序单元 SPI时序 W25Q64简介 硬件电路 W25Q64框图 Flash操作注意事项 SPI外设简介 SPI框图 SPI基本结构 主模式全双工连续传输 非连续传输 软件/硬件波形对比 SPI应用 软件SPI读写W25Q64 硬件SPI读写W25Q64 SP…

在复制 PowerPoint (PPT) 文件时,其中嵌入或者链接的 Excel 文件能够自动创建一个新的实例,而不是继续引用原始的 Excel 文件。

问题: 在复制 PowerPoint (PPT) 文件时,其中嵌入或者链接的 Excel 文件能够自动创建一个新的实例,而不是继续引用原始的 Excel 文件。 解答: 导入已有的excel实测是不行的

为什么程序员应该学习多种语言?

前言 有一句老话适用于所有软件开发人员:知道得越多,成长得越多。程序员学习多种编程语言后、‌可以加速学习新技术、‌拓展认知和视野。‌ 对于程序员来说,‌精通一门编程语言意味着对该语言有深入的理解和熟练的运用,‌这为程…