你好,我是 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);
这是扑通: 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中工作。