我有一个项目容器和项目模式,应该在其容器中添加和删除子项目。添加是好的,而删除什么都不做。看起来,当删除任何子项时,angular2 * ngFor指令不起作用。Angular2 - ngFor指令不会映射删除的项目
import { NgFor} from 'angular2/common';
import { bootstrap } from 'angular2/platform/browser';
import { Component, View, Directive, OnDestroy, Input, enableProdMode } from 'angular2/core';
import { CORE_DIRECTIVES} from 'angular2/common';
@Component({selector: 'itemcontainer',})
@View({ template: `<ul (click)="$event.preventDefault()">
<li *ngFor="#it of items">Any Item</li>
</ul>
<div><ng-content></ng-content></div>`,
directives: [NgFor],
})
export class ItemContainer {
public items: Array<Item> = [];
public addItem(item: Item) {
this.items.push(item);
}
public removeItem(item: Item) {
var index = this.items.indexOf(item);
if (index === -1) {
return;
}
console.log(`Index about to remove: ${index} this.items length: ${this.items.length}`);
this.items.slice(index, 1);
console.log(`this.items length: ${this.items.length}`);
}
}
@Directive({ selector: 'item' })
export class Item implements OnDestroy {
@Input() public heading: string;
constructor(public itemcontainer: ItemContainer) {
this.itemcontainer.addItem(this);
}
ngOnDestroy() {
this.itemcontainer.removeItem(this);
}
}
@Component({
selector: 'my-app'
})
@View({
template: `<div (click)="$event.preventDefault()">
<button type="button" (click)="addItem()">Add item</button>
<button type="button" (click)="removeItem()">Remove item</button>
<itemcontainer>
<item *ngFor="#containerItem of containerItems" [heading]="containerItem.title">Content </item>
</itemcontainer>
</div>`,
directives: [CORE_DIRECTIVES, Item, ItemContainer],
})
class Tester {
private counter: number = 2;
public containerItems: Array<any> = [
{ title: 'Item1' },
{ title: 'Item2' },
];
addItem() {
this.containerItems.push({ title: `Item ${this.counter}` });
}
removeItem() {
if (this.containerItems.length > 0) {
this.containerItems.splice(this.containerItems.length - 1, 1);
}
}
}
enableProdMode();
bootstrap(Tester);
这里是DOM照顾两个新项目添加和删除,如:
<itemcontainer>
<ul>
<li>Any Item</li>
<li>Any Item</li>
<li>Any Item</li>
<li>Any Item</li>
</ul>
<div>
<item>Content </item>
<item>Content </item>
</div>
</itemcontainer>
的问题是,李部分不删除。任何想法?
(I具有角2.0.0-beta.3和2测试它)
由于'正在使用ngFor',角度变化检测会注意到,当项目被添加或删除就好了。这里没有更改检测的问题。这个问题很容易用'splice()'而不是'slice()'来解决。详情请参阅我的回答。 –
这很奇怪!我几乎肯定会遇到同样的问题,因为我修正了这个问题......在您发表评论之后,我做了一个新的尝试(请参阅此PLUNK:https://plnkr.co/edit/YZkC74yOnJgSLEdzjcOE?p =预览),但我不能重现它...感谢您指出这一点,马克! –
也许你正在考虑无状态管道与数组一起使用的情况 - 例如http://stackoverflow.com/a/34497504/215945 解决该问题的一种方法就是完成您在此处所做的工作。 。改变数组引用。 –