HarmonyOs开发

UI开发的两种范式:ArkTS、JS对比

ArkUI为开发者提供了两种范式:基于TypeScript声明式范式ArkTS、兼容JS的类Web开发范式JS
在这里插入图片描述
我们在新建项目时可以选择除了ArkTs之外的JS进行编写
代码对比后续我会做更新

进行真机调试以及模拟器调试不热更新

特别注意:使用模拟器是不支持热更新的,如果在开发阶段建议使用第二种的Previewer/预览器
在这里插入图片描述
在这里插入图片描述
选择入口文件点击预览

做一个自定义tab

主入口代码:

import { TabComponent } from '../components/tabs';
import { zdyDetail } from './zdyDetail';
import { zdyDetail2 } from './zdyDetail2';

// @Styles function globalFancy  () {//全局样式
//   .width(150)
//   .height(100)
//   .backgroundColor(Color.Pink)
// }

@Entry
@Component
struct Index {
  @State heightValue: number = 100 //需要变化的属性值
  @State pageIndex : number = 0 //默认页面下标为0


  // 定义在组件内的@Styles封装的样式
  // @Styles fancy() {
  //   .width(200)
  //   .height(this.heightValue)
  //   .backgroundColor(Color.Yellow)
  //   .onClick(() => {
  //     this.heightValue = 200
  //   })
  // }


  @State message: string = 'Hello World'
  @State data: Object = {}
  @State tabs: Array<object> = []
  build() {
    Column() {
      TabComponent({tabData : $tabs , zdyTabIndex : $pageIndex})
      if(this.pageIndex==0){
        zdyDetail()
      }else if(this.pageIndex==1){
        zdyDetail2()
      }
    }
  }

  aboutToAppear(){
    this.tabs = [{
      name : '导航1',
      id : 0
    },{
      name : '导航2',
      id : 1
    },{
      name : '导航3',
      id :2
    }]

  }
}

tab组件:

//自定义tab
@Component //自定义组件
export struct TabComponent {
  @State message: string = 'Hello World'
  @Link tabData: Array<object>
  @Link zdyTabIndex: number



  @State bgColorValue: number = Color.Pink //需要变化的属性值

  // @Styles bgColor() {
  //   .backgroundColor(item ? Color.Blue : Color.Pink)
  //   // .onClick(() => {
  //   //   this.bgColorValue = Color.Blue
  //   // })
  // }

  build() {
    Column() {
      Row(){
        ForEach(this.tabData , (item,index)=>{
          Column() {
            Text(item.name)
              .textAlign(TextAlign.Center)
              .lineHeight(40)
                // .borderWidth(1)
              .fontSize('18fp')
          }
          .layoutWeight(3)
          .backgroundColor(Color.Pink)
          .height(50)
          .backgroundColor(index == this.zdyTabIndex ? Color.Blue : Color.Pink)
          .onClick(() => {
            this.zdyTabIndex = index;
          })
          // .width()
        })
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceBetween)



    }
  }


}

子组件页面

@Component

export struct zdyDetail2 {
  build(){
    Text("detail2")
      .lineHeight(100)
      .fontSize(30)
  }
}

@Component

export struct zdyDetail {
  build(){
    Text("detail")
      .lineHeight(100)
      .fontSize(30)
  }
}

效果如图:
在这里插入图片描述
在这里插入图片描述
感受:目前对ArkTS的用法还不熟悉,对于一些属性上的运用有些吃力

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值