【发布时间】:2018-02-27 14:32:19
【问题描述】:
我在另一个 *ngFor 中有一个 *ngFor。当另一个 *ngFor 中使用的对象发生更改时,就会出现问题。假设这是我们的数据:
const data = [
{
id: 1,
name: 'First parent',
children: [
{id: 1, name: 'child1', val: ['1', '2']},
{id: 2, name: 'child2', val: ['3', '4']}
]
},
{
id: 2,
name: 'Second parent',
children: [
{id: 3, name: 'child3', val: ['5', '6']},
{id: 4, name: 'child4', val: ['7', '8']}
]
}
];
现在,像这样显示这些数据:
<div *ngFor="let parent of data">
<h3>{{parent.name}}</h3>
<div *ngFor="let child of parent.children">
<div (click)="childClicked(parent, child)">
<span>Name: {{child.name}}</span>
<span>Value: {{child.val}}</span>
</div>
</div>
</div>
childClicked:
const newData = [
{
id: 1,
name: 'Some parent',
children: []
}
];
function childClicked(parent, child) {
const newParent = newData.filter(p => p.id === parent.id)[0];
if (newParent.children.filter(c => c.id === child.id).length === 0) {
newParent.children.push(child);
newParent.children[0].val = [];
}
}
注意!这是一个和我的代码类似的模型,但是代码太多,获取数据的请求很少,所以这样描述问题更容易。
现在,当将子级添加到其新父级时,子级在 HTML 中的值会发生变化。添加时,我们写“newParent.children[0].val = [];”,因为孩子之前的值只存在于旧的父项中。
如何让 HTML 仍然显示旧值(child.val)?
【问题讨论】:
标签: angular