【问题标题】:Angular 2 writing structural directive like ngFor, iterableDiffer may be causing errorsAngular 2 编写结构指令,如 ngFor、iterableDiffer 可能会导致错误
【发布时间】:2017-11-18 18:57:51
【问题描述】:

您好,我是 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 中运行我的指令,我可以让它工作,并去掉不同的类型,像这样:
private differ:IterableDiffer(now)
private differ:IterableDiffer<any>(before )

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

【问题讨论】:

    标签: javascript angular2-directives ngfor ng-template


    【解决方案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 中工作。

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2016-11-28
      • 2017-05-24
      • 2017-02-02
      • 2017-06-11
      • 2021-09-29
      相关资源
      最近更新 更多