【发布时间】:2019-02-17 19:24:10
【问题描述】:
我正在使用一个函数来返回一个 Observable,然后在模板中使用异步管道,但这会导致成千上万的网络请求并使浏览器崩溃。我确信这很明显,但是我是 Angular 的新手。我在 stackblitz 上创建了一个示例:
https://stackblitz.com/edit/angular-mvpknj
<h1>Todos</h1>
<<ul>
<li *ngFor="let todo of completedTodos | async" >{{ todo.title }}</li>
<!-- <li *ngFor="let todo of getCompletedTodos() | async" >{{ todo.title }}</li> -->
</ul>
未注释的行可以正常工作,因为它引用的是类变量而不是函数。
如果您取消注释使用 getCompletedTodo 函数的 *ngFor,它只会炸毁浏览器。
【问题讨论】:
-
这是一个很好的例子,说明为什么在模板中应该避免函数表达式,因为 Angular 会多次调用它们,如果其他属性发生变化,然后再调用多次。您将结果分配给类属性的方法比函数表达式更有效。这不仅仅是因为 ngFor,这与 Angular 和变更检测有关。尝试对原始数据做同样的事情,并记录它被函数表达式调用的次数。这就是为什么在很多情况下都推荐使用 Pipe 的原因,因为它可以缓存结果。
标签: angular typescript rxjs