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.
中运行
你好我是 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.
中运行