当前位置:   article > 正文

HarmanyOS-ArkUI-状态管理-@state_name: string = '任务 + ${task.id++}

name: string = '任务 + ${task.id++}

使用说明

1. @State装饰器标记的变量必须初始化,不能为空值
2. @State支持Object、class、string、number、boolean、enum类型以及这些类型的数组
3. 嵌套类型以及数组中的对象属性无法触发视图更新

使用案例

项目案例

界面预览

代码

  1. class Task{
  2. static id:number = 1
  3. //任务名称
  4. name:string = `任务${Task.id++}`
  5. //任务状态
  6. finished:boolean = false
  7. }
  8. //import {Task} from '../components/Task'
  9. //样式卡片
  10. @Styles function card(){
  11. .width('95%')
  12. .padding(20)
  13. .backgroundColor(Color.White)
  14. .borderRadius(15)
  15. .shadow({radius:6,color:'#1f000000',offsetX:2,offsetY:4})
  16. }
  17. //任务完成样式
  18. @Extend(Text) function finishedTask(){
  19. .decoration({type:TextDecorationType.LineThrough})
  20. .fontColor('#B1B2B1')
  21. }
  22. @Entry
  23. @Component
  24. struct ProPage {
  25. //总任务数量
  26. @State totalTask:number = 0
  27. //已完成任务数量
  28. @State finishTask:number = 0
  29. //任务数组
  30. @State tasks: Task[] = []
  31. handleTaskChange(){
  32. //更新任务数量
  33. this.totalTask = this.tasks.length
  34. //更新已完成任务数量
  35. this.finishTask = this.tasks.filter(item => item.finished).length
  36. //完成的任务变灰色
  37. }
  38. build() {
  39. Column({space:10}){
  40. //任务进度
  41. Row(){
  42. Text('任务进度:').fontSize(30).fontWeight(FontWeight.Bold)
  43. Stack(){//堆叠容器
  44. Progress({//进度样式
  45. value:this.finishTask,
  46. total:this.totalTask,
  47. type:ProgressType.Ring
  48. })
  49. Row(){
  50. Text(this.finishTask.toString()).fontSize(24).fontColor('#36D')
  51. Text(' / '+this.totalTask.toString()).fontSize(24)
  52. }
  53. }
  54. }
  55. .card()
  56. .margin({top:20,bottom:10})
  57. .justifyContent(FlexAlign.SpaceEvenly)
  58. //任务按钮
  59. Button('新增任务')
  60. .width(200)
  61. .onClick(()=>{
  62. //新增任务数据
  63. this.tasks.push(new Task())
  64. this.handleTaskChange()
  65. })
  66. //任务列表
  67. List({space:10}){
  68. ForEach(
  69. this.tasks,
  70. (item:Task,index)=>{
  71. ListItem(){
  72. Row(){
  73. Text(item.name).fontSize(20)
  74. Checkbox()
  75. .select(item.finished)
  76. .onChange( val =>{
  77. //更新当前任务状态
  78. item.finished = val
  79. this.handleTaskChange()
  80. })
  81. }
  82. .card()
  83. .justifyContent(FlexAlign.SpaceBetween)
  84. }
  85. .swipeAction({end:this.DeleteButton(index)})
  86. }
  87. )
  88. }
  89. .width('100%')
  90. .alignListItem(ListItemAlign.Center)
  91. .layoutWeight(1)
  92. }
  93. .width('100%')
  94. .height('100%')
  95. .backgroundColor('#F1F2F3')
  96. }
  97. @Builder DeleteButton(index:number){
  98. Button(){
  99. Image($r('app.media.delete'))
  100. .fillColor(Color.White)
  101. .width(20)
  102. }
  103. .width(40)
  104. .height(40)
  105. .type(ButtonType.Circle)
  106. .backgroundColor(Color.Red)
  107. .margin({left:5})
  108. .onClick(()=>{
  109. this.tasks.splice(index,1)
  110. this.handleTaskChange()
  111. })
  112. }
  113. }

注:个人学习笔记 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/310125
推荐阅读
相关标签
  

闽ICP备14008679号