0

您好,我对 Angular 2 还很陌生,想写一个 ngFor 的实现来练习。我找到了这个教程: https ://teropa.info/blog/2016/03/06/writing-an-angular-2-template-directive.html

我让它工作,但最近我不断收到这个错误。“错误类型错误:this._trackByFn 不是函数”。

我希望可以对此进行更多调试,但文档很少,而且我并不完全理解 IterableDiffer(s)。所有人都看到它在第 41 行之后死了。我一直试图弄清楚我现在改变了几个小时。

let changes = this.differ.diff(this.collection);

这是plunk:http ://plnkr.co/edit/aM8Wdz72gu7BVNAN9Ulv?p=preview

感谢您提供的任何帮助。

更新:

我发现如果我在 Angular 2 中运行它,我可以让我的指令工作,并去掉不同的类型,如下所示:
private differ:IterableDiffer(now)
private differ:IterableDiffer<any>(before)

仍然不是解决方案,因为我想弄清楚如何在 Angular 4 中完成这项工作。

4

1 回答 1

1

我怀疑问题出在您区分集合的点的上游。Angular 4 删除了 IterableDifferFactory 的 ChangeDetectorRef 参数。我建议回到您的 Angular 4 版本并更改与您不同的代码行,例如:

this.differ = this.differs.find(coll).create(this.changeDetector);

类似于:

this.differ = this.differs.find(coll).create((value) => value);

我对我的自定义版本的 ngFor 进行了更改,并允许它在 Angular 4 中工作。

于 2017-09-12T22:22:10.163 回答