Ответ 1
В браузере Angular есть только JavaScript, поэтому типичные оговорки применяются.
Одна вещь, которую Angular специально предупреждает, хотя это Observables. После того, как вы подписаны на один, он будет продолжать работать, пока вы не отпишетесь, даже если вы перейдете к другому виду. Angular неприменимо для вас, где это возможно (например, если вы используете трубу async
в шаблоне:
модель
//listenToServer returns an observable that keeps emitting updates
serverMsgs = httpService.listenToServer();
шаблон
<div>{{serverMsgs | async}}</div>
Angular отобразит сообщения сервера в div, но завершите подписку, когда вы уйдете.
Однако, если вы подписались на себя, вы также должны отказаться от подписки:
модель
msgs$ = httpService.listenToServer().subscribe(
msg => {this.serverMsgs.push(msg); console.log(msg)}
);
шаблон
<div *ngFor="let msg of serverMsgs">{{msg}}</div>
Когда вы перемещаетесь, даже если вы не видите новых сообщений в представлении, вы увидите их напечатанные на консоли по мере их поступления. Чтобы отказаться от подписки при удалении компонента, выполните следующие действия:
ngOnDestroy(){ this.msgs$.unsubscribe(); }
мы должны отказаться от подписки до того, как Angular уничтожит компонент. Неспособность это может привести к утечке памяти.