interface good{
id:string,
name:string,
img?:string
}
//observed要配合组件一起使用
@Observed
class Cartlist{
id:string;
product:good;
count:number;
constructor(count:number,product:good) {
this.id=""+Date.now()
this.product=product
this.count=count
}
}
@Component
struct cartItem{
//与observed搭配使用
@ObjectLink item:Cartlist
build() {
Row(){
Text(this.item.product.name)
Text(this.item.count+'')
}
.justifyContent(FlexAlign.SpaceBetween)
}
}
@Entry
@Component
struct Goodlsit {
@State message: string = 'Hello World';
@State cartlist:Cartlist[]=[]
@State goodlist:good[]=[
{
id:"1",
name:"熊大",
},
{
id:"2",
name:"熊二"
},
{
id:"3",
name:"熊三"
}
]
build() {
Column(){
ForEach(this.goodlist,(item:good)=>{
Row(){
Text(item.name)
Button("加入购物车")
.onClick(()=>{
const myindex =this.cartlist.findIndex((a:Cartlist)=>a.product.id==item.id)
if(myindex>-1){
this.cartlist[myindex].count=this.cartlist[myindex].count+1
}
else {
this.cartlist.push(new Cartlist(1,{
id:item.id,
name:item.name,
img:item.img
}))
}
})
}
})
Text("购物车")
List(){
ForEach(this.cartlist,(item:Cartlist)=>{
ListItem(){
cartItem({item:item})
}
})
}
}
}
}
他们两个必须搭配使用