自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
.fontColor('#FFFFFF,90%') .onClick(() => { this.greenButtonState.width = (this.greenButtonState.width < 700) ? this.greenButtonState.width + 100 : 100; }) // class类型初始化@Link GreenButton({ greenButtonState: $greenButtonState }).margin(12) // 简单类型初始化@Link YellowButton({ yellowButtonState: $yellowButtonProp }).margin(12) } }
}
}
![](https://img-blog.csdnimg.cn/img_convert/c91a8765747b7fc8cae034495f616209.gif) #### 数组类型的@Link
@Component
struct Child {
@Link items: number[];
build() {
Column() {
Button(Button1: push)
.margin(12)
.width(312)
.height(40)
.fontColor(‘#FFFFFF,90%’)
.onClick(() => {
this.items.push(this.items.length + 1);
})
Button(Button2: replace whole item)
.margin(12)
.width(312)
.height(40)
.fontColor(‘#FFFFFF,90%’)
.onClick(() => {
this.items = [100, 200, 300];
})
}
}
}
@Entry
@Component
struct Parent {
@State arr: number[] = [1, 2, 3];
build() {
Column() {
Child({ items: KaTeX parse error: Expected 'EOF', got '}' at position 5: arr }̲) .marg…{item}`)
.margin(12)
.width(312)
.height(40)
.backgroundColor(‘#11a2a2a2’)
.fontColor(‘#e6000000’)
},
(item: ForEachInterface) => item.toString()
)
}
}
}
![](https://img-blog.csdnimg.cn/img_convert/15669d373276d14a84cbb02b24e2f64d.gif) 上文所述,ArkUI框架可以观察到数组元素的添加,删除和替换。在该示例中@State和@Link的类型是相同的number[],不允许将@Link定义成number类型(@Link item : number),并在父组件中用@State数组中每个数据项创建子组件。如果要使用这个场景,可以参考 @Prop 和@Observed。 #### 装饰Map类型变量 > > **说明:** > 从API version 11开始,@Link支持Map类型。 > > > 在下面的示例中,value类型为Map,点击Button改变message的值,视图会随之刷新。
@Component
struct Child {
@Link value: Map
build() {
Column() {
ForEach(Array.from(this.value.entries()), (item: [number, string]) => {
Text(${item[0]}).fontSize(30)
Text(${item[1]}).fontSize(30)
Divider()
})
Button(‘child init map’).onClick(() => {
this.value = new Map([[0, “a”], [1, “b”], [3, “c”]])
})
Button(‘child set new one’).onClick(() => {
this.value.set(4, “d”)
})
Button(‘child clear’).onClick(() => {
this.value.clear()
})
Button(‘child replace the first one’).onClick(() => {
this.value.set(0, “aa”)
})
Button(‘child delete the first one’).onClick(() => {
this.value.delete(0)
})
}
}
}
@Entry
@Component
struct MapSample2 {
@State message: Map
build() {
Row() {
Column() {
Child({ value: this.message })
}
.width(‘100%’)
}
.height(‘100%’)
}
}
#### 装饰Set类型变量 > > **说明:** > > > 从API version 11开始,@Link支持Set类型。 > > > 在下面的示例中,message类型为Set,点击Button改变message的值,视图会随之刷新。
@Component
struct Child {
@Link message: Set
build() {
Column() {
ForEach(Array.from(this.message.entries()), (item: [number, string]) => {
Text(${item[0]}).fontSize(30)
Divider()
})
Button(‘init set’).onClick(() => {
this.message = new Set([0, 1, 2, 3, 4])
})
Button(‘set new one’).onClick(() => {
this.message.add(5)
})
Button(‘clear’).onClick(() => {
this.message.clear()
})
Button(‘delete the first one’).onClick(() => {
this.message.delete(0)
})
}
.width(‘100%’)
}
}
@Entry
@Component
struct SetSample1 {
@State message: Set = new Set([0, 1, 2, 3, 4])
build() {
Row() {
Column() {
Child({ message: this.message })
}
.width(‘100%’)
}
.height(‘100%’)
}
}
### Link支持联合类型实例 @Link支持联合类型和undefined和null,在下面的示例中,name类型为string | undefined,点击父组件Index中的Button改变name的属性或者类型,Child中也会对应刷新。
@Component
struct Child {
@Link name: string | undefined
build() {
Column() {
Button('Child change name to Bob') .onClick(() => { this.name = "Bob" }) Button('Child change animal to undefined') .onClick(() => { this.name = undefined }) }.width('100%')
}
}
@Entry
@Component
struct Index {
@State name: string | undefined = “mary”
build() {
Column() {
Text(The name is ${this.name}).fontSize(30)
Child({ name: this.name }) Button('Parents change name to Peter') .onClick(() => { this.name = "Peter" }) Button('Parents change name to undefined') .onClick(() => { this.name = undefined }) }
}
}
### 常见问题 #### @Link装饰状态变量类型错误 在子组件中使用@Link装饰状态变量需要保证该变量与数据源类型完全相同,且该数据源需为被诸如@State等装饰器装饰的状态变量。 【反例】
@Observed
class ClassA {
public c: number = 0;
constructor(c: number) {
this.c = c;
}
}
@Component
struct LinkChild {
@Link testNum: number;
build() {
Text(LinkChild testNum ${this.testNum})
}
}
@Entry
@Component
struct Parent {
@State testNum: ClassA[] = [new ClassA(1)];
build() {
Column() {
Text(Parent testNum ${this.testNum[0].c})
.onClick(() => {
this.testNum[0].c += 1;
})
// @Link装饰的变量需要和数据源@State类型一致
LinkChild({ testNum: this.testNum[0].c })
}
}
}
@Link testNum: number从父组件的LinkChild({testNum:this.testNum.c})初始化。@Link的数据源必须是装饰器装饰的状态变量,简而言之,@Link装饰的数据必须和数据源类型相同,比如@Link: T和@State : T。所以,这里应该改为@Link testNum: ClassA,从父组件初始化的方式为LinkChild({testNum: $testNum}) 【正例】
@Observed
class ClassA {
public c: number = 0;
constructor(c: number) {
this.c = c;
}
}
@Component
struct LinkChild {
@Link testNum: ClassA[];
build() {
Text(LinkChild testNum ${this.testNum[0]?.c})
}
}
@Entry
@Component
struct Parent {
@State testNum: ClassA[] = [new ClassA(1)];
build() {
Column() {
Text(Parent testNum ${this.testNum[0].c})
.onClick(() => {
this.testNum[0].c += 1;
})
// @Link装饰的变量需要和数据源@State类型一致
LinkChild({ testNum: $testNum })
}
}
}
**为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:[`https://qr21.cn/FV7h05`]( )** ### 《鸿蒙开发学习手册》: #### **如何快速入门:[`https://qr21.cn/FV7h05`]( )** 1. 基本概念 2. 构建第一个ArkTS应用 3. …… ![](https://img-blog.csdnimg.cn/img_convert/afd6b98a09014e557566dec0fd065c41.webp?x-oss-process=image/format,png) #### **开发基础知识:[`https://qr21.cn/FV7h05`]( )** 1. 应用基础知识 2. 配置文件 3. 应用数据管理 4. 应用安全管理 5. 应用隐私保护 6. 三方应用调用管控机制 7. 资源分类与访问 8. 学习ArkTS语言 9. …… ![](https://img-blog.csdnimg.cn/img_convert/c02d1bcf9201e3d3d8baf3b812f8e370.webp?x-oss-process=image/format,png) #### **基于ArkTS 开发:[`https://qr21.cn/FV7h05`]( )** 1. Ability开发 2. UI开发 3. 公共事件与通知 4. 窗口管理 5. 媒体 6. 安全 7. 网络与链接 8. 电话服务 9. 数据管理 10. 后台任务(Background Task)管理 11. 设备管理 12. 设备使用信息统计 13. DFX 14. 国际化开发 15. 折叠屏系列 16. …… 3. 应用数据管理 4. 应用安全管理 5. 应用隐私保护 6. 三方应用调用管控机制 7. 资源分类与访问 8. 学习ArkTS语言 9. …… ![](https://img-blog.csdnimg.cn/img_convert/c02d1bcf9201e3d3d8baf3b812f8e370.webp?x-oss-process=image/format,png) #### **基于ArkTS 开发:[`https://qr21.cn/FV7h05`]( )** 1. Ability开发 2. UI开发 3. 公共事件与通知 4. 窗口管理 5. 媒体 6. 安全 7. 网络与链接 8. 电话服务 9. 数据管理 10. 后台任务(Background Task)管理 11. 设备管理 12. 设备使用信息统计 13. DFX 14. 国际化开发 15. 折叠屏系列 16. ……
还没有评论,来说两句吧...