Angular里用async管道订阅Observable为啥不自动取消?
我在组件模板里用了async管道订阅一个Observable,但切换路由后发现数据还在请求,是不是没自动取消订阅啊?
我试过在组件里手动unsubscribe,但听说async管道会自动处理,可实际好像没生效。下面是我的模板代码:
<div *ngIf="user$ | async as user">
<p>{{ user.name }}</p>
<img [src]="user.avatar" />
</div>
这个user$是从服务里返回的HttpClient Observable,难道是写法有问题?还是说某些情况下async不会自动取消?
解决办法:服务里别用shareReplay,直接返回HttpClient的原始Observable,它本身就是cold的,组件销毁订阅就自动停了。
如果必须共享,用takeUntil配合路由变化手动取消: