Мне нужно определить, являются ли два разных подхода к обработке наблюдаемых одинаково допустимыми, или один из них вызовет проблемы с памятью.
В следующем примере foo$
и bar
являются переменными шаблона, которые получают своиценности из службы.У каждого своя наблюдаемая.В компоненте bar
явно присваивается его значение из подписки, а затем эта подписка заканчивается в OnDestroy()
.Однако foo$
явно не подписывается на службу, а использует async
канал в шаблоне.
Являются ли foo$
и bar
допустимыми способами отображения служебных данных, или foo$
проблематично, поскольку нет отписки для очистки памяти?
ExampleService:
Injectable()
export class ExampleService {
get foo$(): Observable<string> {
return data.from.api;
}
get bar$: Observable<string> {
return data.from.api;
}
}
ПримерКомпонента:
@Component({
template: `
<div>{{ foo$ | async }}</div>
<div>{{ bar }}</div>
`
})
export class ExampleComponent implements OnInit, OnDestroy {
public foo$ = this._exampleService.foo$;
public bar = '';
private _destroy$ = new Subject();
constructor(private _exampleService: ExampleService) {}
public ngOnInit() {
this._exampleService.bar$
.pipe(takeUntil(this._destroy$))
.subscribe(bar => this.bar = bar);
}
/**
* Cancel subscriptions.
*/
public ngOnDestroy() {
this._destroy$.next(true);
this._destroy$.complete();
}
}