angular - 如何在 Angular 9 中将分页与 Observables 和 AsyncPipe 结合起来?

标签 angular asynchronous rxjs observable angular9

有一个来自 API 的产品列表。产品分页,用户可以切换到另一个页面。简化的模板如下所示:

<ul>
  <li *ngFor="let product of products$ | async">{{ product.name }}</li>
</ul>

<button type="button" (click)="gotoPage(1)">1</button>
<button type="button" (click)="gotoPage(2)">2</button>

该组件看起来像这样:
export class ProductsComponent implements OnInit {
  products$: Observable<Product[]>;

  constructor(
    private service: ProductService
  ) { }

  ngOnInit() {
    this.products$ = this.service.getAll({page: 1});
  }

  gotoPage(page: number): void {
    this.products$ = this.service.getAll({page: page});
  }
}

我的问题是:
这是更新 Obersavble 的正确方法吗?或者这会产生内存泄漏吗?

请注意:URL 不会更改,并且组件不应在分页更改时重新加载。

最佳答案

看着source异步管道,你可以看到里面transform()功能:

if (obj !== this._obj) {
  this._dispose();
  return this.transform(obj as any);
}

如果有一个,如果它是一个新对象,则取消订阅先前的 Observable。因此,您可以安全地使用它。

关于angular - 如何在 Angular 9 中将分页与 Observables 和 AsyncPipe 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62086000/

相关文章:

node.js - Angular Universal 只显示第一页的页面源

javascript - RxJS 相当于 Promise.resolve()

angular - 错误 : Angular CLI v10. 1.0 及更高版本(没有 `tsconfig.base.json` )

angular - 使用 canLoad 预加载惰性路由

python - Django 3.1 - 异步 View - 使用查询集

Javascript/Typescript 将默认常量导出为异步函数调用的值

typescript - Angular5在项目中导入RxJS时出错

angular - 如何为对象创建行为主题并在另一个组件上订阅它?

javascript - Angular 2 共享数据服务不工作

Scalatra 2.1 Akka future 示例