Angular 2 写结构指令如ngFor、iterableDiffer可能会出错

Angular 2 writing structural directive like ngFor, iterableDiffer may be causing errors

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

我可以正常使用,但最近我不断收到此错误。 "ERROR TypeError: this._trackByFn is not a function"。

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

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

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

感谢您提供的任何帮助。

更新:

我发现,如果我在 Angular 2 中 运行 指令并删除 differ 的类型,我可以使我的指令起作用,如下所示:
private differ:IterableDiffer(现在)
private differ:IterableDiffer<any>(之前)

仍然不是解决方案,因为我想弄清楚如何在 Angular 4.

中完成这项工作

我怀疑问题出在您比较集合的上游。 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.

中运行