我有标头的材料清单。标题下分组了类似的项目。 我还添加了删除按钮。如果我从列表中删除最后一项,则标题也应删除。我尝试过的是:
https://stackblitz.com/edit/angular-material-list-brenrk?file=app/app.component.ts
但是它并没有被移除。请帮忙。
答案 0 :(得分:2)
默认情况下,Angular的更改检测在您的数组中循环,并检查是否有对先前更改的参考更改。现在,您无需更改任何引用,只需更改这些对象的属性即可。 由于数组中的对象引用不会更改,因此Angular无法识别出更改。我建议使用不可变的运算符,该运算符不会改变前一个对象,但会创建一个现在的对象:
removeFromList(obj){
this.valmap = this.valmap
.map(element => {
return {category: element.category, values: element.values.filter(fruit => fruit.name !== obj.name)}
})
.filter(element => element.values.length > 0)
}
您的另一选择是在您的˙ngFor`中引入trackBy
,以通知Angular属性何时更改。
答案 1 :(得分:1)
您真的很愿意这样做。
这是您的应用程序已更正且可以正常运行: https://stackblitz.com/edit/angular-material-list-bufnqr
为说明起见,最好为每个字段调用element.category
代替element['category']
,依此类推,您需要删除element.category
而不是element.name
您删除了最后一项。