【发布时间】:2016-05-23 14:52:12
【问题描述】:
我有一个项目容器和项目模式,应该在其中添加子项目并从其容器中删除。添加很好,而删除什么也不做。当删除任何子项时,似乎 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>
问题是 li 部分没有被删除。有什么想法吗?
(我用 angular 2.0.0-beta.3 和 2 对其进行了测试。)
【问题讨论】:
标签: angular