HarmonyOS开发的项目运行在ArkUI-X详解

HarmonyOS开发的项目如何运行在ArkUI-X,ArkUI-X和 HarmonyOS Next 都是使用 API Version 10+ 的OS版本,对语法要求更严格。主要分为以下两步来实现。更多HarmonyOS开发详解见: HarmonyOS HarmonyOS Next系列教程下载地址-IT营大地老师
一、同步代码
1 、复制 HarmonyOS entry\src\main\ets\pages 里面的所有文件到 ArkUI-X 项目的
entry\src\main\ets\pages 里面
2 、复制 HarmonyOS entry\src\main\resources 里面的所有文件到 ArkUI-X 项目的
entry\src\main\resources 目录里面,这里面包含了资源文件和路由配置文件
3 、修改 ArkUI-X entry/src/main/module.json5 , 如果 HarmonyOS 项目中配置了网络请求或者申请
权限的代码还需在 module.json5 中重新配置
二、让 HarmonyOS 代码能在 ArkUI-X 中运行
ArkUI-X HarmonyOS Next 都是使用 API Version 10+ OS 版本,对语法要求更严格。
如果以前写代码语法不规范还需要进行微调
1 、循环遍历数据必须指定类型
下面代码在 HarmonyOS 中可以运行,但是在 ArkUI-X 中会提示 item 错误
List({space:10}){
ForEach([1,3,4,5,6,7,87,8,8,9,23,34],(item)=>{
ListItem(){
Text(`${item}`)
.fontSize(34)
.width('100%')
.height(60)
.borderRadius(10)
.textAlign(TextAlign.Center)
.backgroundColor('#eee')
}
})
}
.padding(10)
.height('100%')
解决方法
循环遍历的时候指定数据类型
List({space:10}){
ForEach([1,3,4,5,6,7,87,8,8,9,23,34],(item:number)=>{
ListItem(){
Text(`${item}`)
.fontSize(34)
.width('100%')
.height(60)
.borderRadius(10)
.textAlign(TextAlign.Center)
.backgroundColor('#eee')
}
})
}
.padding(10)
.height('100%')
提示: 对应的 key 也需要配置类型
@Entry
@Component
struct Grid_1_View_Page {
arr: string[] =
[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,'12','13','14','15']
build() {
Column() {
Grid(){
ForEach(this.arr,(item:string)=>{
GridItem(){
Text(item)
.fontSize(26)
.fontColor(Color.White)
.backgroundColor("#007DFF")
.width('100%')
.height('160')
.textAlign(TextAlign.Center)
}
},(item:string)=>item)
}.columnsTemplate('1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.padding(10)
}
.width('100%')
.height('100%')
}
}
2 、定义响应式数据需要指定初值
下面代码在 HarmonyOS 中可以运行,但是在 ArkUI-X 中会提示
Property 'cId' has no initializer and is not definitely assigned in the
constructor.
Property 'pId' has no initializer and is not definitely assigned in the
constructor.
private pId: number
private cId: number
aboutToAppear(){
let params:object = router.getParams()
console.log(params["pId"])
console.log(params["cId"])
this.pId=params["pId"];
this.cId=params["cId"];
}
解决方法 : 定义响应式数据需要指定初值
private pId: number=0
private cId: number=0
aboutToAppear(){
let params:object = router.getParams()
console.log(params["pId"])
console.log(params["cId"])
this.pId=params["pId"];
this.cId=params["cId"];
}
3 、定义变量需要指定类型
下面代码在 HarmonyOS 中可以运行,但是在 ArkUI-X 中会提示
Indexed access is not supported for fields
private pId: number=0
private cId: number=0
aboutToAppear(){
let params = router.getParams()
console.log(params["pId"])
console.log(params["cId"])
this.pId=params["pId"];
this.cId=params["cId"];
}
解决方法 : 定义变量需要指定类型
private pId: number=0
private cId: number=0
aboutToAppear(){
let params:object = router.getParams()
console.log(params["pId"])
console.log(params["cId"])
this.pId=params["pId"];
this.cId=params["cId"];
}
4 parseInt() 报错 使用 Number() 方法替换
Usage of standard library is restricted (arkts-limited-stdlib) <ArkTSCheck
import router from '@ohos.router'
@Component
export struct AppBar {
//在build方法执行之前执行
aboutToAppear(){
console.log(router.getLength())
}
//build方法执行完毕后才执行
onPageShow(){
}
title:string="首页"
build(){
Row(){
if(Number(router.getLength())>1) {
Row() {
Image($r("app.media.back")).height(22).padding({ left: 6 })
}.width(60)
.height('100%')
.onClick(() => {
router.back()
})
}
Row(){
Text(this.title)
.size({ width: '100%', height: "50vp" })
.fontColor("#ffffff")
.textAlign(TextAlign.Center)
.fontSize("18fp")
}.layoutWeight(1)
if(Number(router.getLength())>1) {
Row() {
}.width(60)
.height('100%')
}
}
.height(50)
.width('100%')
.backgroundColor("#d81e06")
}
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值