src/main/ets/example1/Models.ets
// 定义class类数据模型
export class TaskDataModel {
// private 私有属性,在类对象外不允许随意更改数据,必须本地初始化。
private tasks: Array<string> = ['早起晨练', '准备早餐', '阅读名著', '学习ArkTs', '玩游戏放松']
getData(): Array<string> {
return this.tasks
}
}
src/main/ets/example1/ItemComponent.ets
// 子组件
@Component
export default struct ItemComponent {
@Prop task_content: string // 从父组件接收待办任务的内容
@State isComplete: boolean = false // 定义状态变量isComplete,是否完成该任务的标记
@Builder // @Builder 组件内自定义构建函数,按值传递参数
CreateIcon(icon: Resource): void { // icon: Resource 表示资源引用类型
Column() {
Image(icon).width(28).height(28).objectFit(ImageFit.Contain).margin(10)
}
}
build() {
Row() {
Column() {
if (this.isComplete) {
this.CreateIcon($r('app.media.ic_ok3'))
} else {
this.CreateIcon($r('app.media.ic_default'))
}
}
Column() {
Text(this.task_content)
.width('100%')
.fontSize(20)
.fontWeight(500)
.decoration({
type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None,
color: Color.Black
})// 根据任务是否完成确定文本删除线
.opacity(this.isComplete ? .6 : 1) // 根据任务是否完成来设置文本透明度
}
.onClick(() => {
this.isComplete = !this.isComplete
})
}
.margin({ bottom: 8, left: 16, right: 16 })
.borderRadius(20)
.padding(10)
.backgroundColor('#FFFFFF')
}
}
src/main/ets/example1/index.ets
// 父组件
import { TaskDataModel } from './Models'
import ItemComponent from "./ItemComponent"
@Entry
@Component
struct TaskListIndex {
private totalDate: Array<string> = []
// 自定义组件生命周期: 组件即将出现时回调该接口,在创建自定义组件新实例后,在执行其build()函数之前执行。
aboutToAppear(): void {
this.totalDate = new TaskDataModel().getData() // 初始化数据
}
build() { // 构建入口的UI界面
Column({ space: 3 }) {
Text('待办')
.fontSize(30)
.fontWeight(800)
.width('90%')
.height(50)
.textAlign(TextAlign.Start)
List() {
ForEach(this.totalDate, (item: string) => {
ItemComponent({ task_content: item })
})
}
}
.width('100%')
.height('100%')
.backgroundColor('#EEEEEE')
}
}