鸿蒙应用开发,Observed,ObjectLink Index04中todo数据改变,子组件todoItem中数据没有变化
@Observed
class Todo{
public value:{id:string,content:string,finished:boolean}[]=[];
constructor() { }
}
@Entry
@Component
struct Index04 {
@State todo: Todo = new Todo();
@State thing:string='';
setThing(value:string){
this.thing=value;
}
addThing(){
if(this.thing.trim().length){
this.todo.value.push({
id:String(new Date()),
content:this.thing.trim(),
finished:false
});
this.thing='';
console.log(JSON.stringify(this.todo));
}
}
build() {
Flex() {
Flex({direction:FlexDirection.Column}){
Row(){
TextInput({ text:this.thing,placeholder:'input to do.' })
.onChange(this.setThing.bind(this))
.width(200)
Button('add')
.onClick(this.addThing.bind(this))
.margin({left:20})
}
TodoItem({ todo:this.todo })
Flex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){
Row(){
CheckboxGroup({group:'choose'})
Text('全选/取消')
}
Text(this.todo.value.filter(item=>item.finished).length+'完成')
Text(this.todo.value.filter(item=>!item.finished).length+'未完成')
}.margin({top:20})
}.padding({top:50,bottom:50,left:20,right:20}).height(400)
}
.height('100%')
}
}
@Component
struct TodoItem{
@ObjectLink todo:Todo;
deleteThing(id:string){
console.log('id=',id);
let index=this.todo.value.findIndex(item=>item.id===id);
if(index!=-1){
this.todo.value.splice(index,1);
}
}
changeState(id:string){
let index=this.todo.value.findIndex(item=>item.id===id);
if(index!==-1){
this.todo[index].finished = !this.todo[index].finished;
}
}
build(){
List() {
if(this.todo.value.length){
ForEach(this.todo.value,(item)=>{
ListItem(){
Flex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){
Checkbox({group:'choose'})
.select(item.finished)
.onChange(this.changeState.bind(this,item.id))
Text(item.content)
Button("删除")
.backgroundColor(Color.Red)
.margin({top:10})
.onClick(this.deleteThing.bind(this,item.id))
}
}
})
}else{
ListItem(){
Text("add something to do").width("100%").textAlign(TextAlign.Center)
}
.height(40)
.border({width:1,color:Color.Grey,})
}
}.margin({top:20})
}
}