Комментарии 10
code
import { Injectable } from '@angular/core';
import { ChatResource } from './_resources/chat.resource';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent {
messages = []
isLoading = false
isError = false
constructor(private chatResource: ChatResource) {
this.chatResource.state.subscribe(state => {
this.messages = state.messages
this.isLoading = state.isLoading
this.isError = state.isError
});
this.chatResource.connect()
this.chatResource.getMessages()
}
sendMessage() {
this.chatResource.sendMessage({ text: 'My message' });
}
}
Я не разработчик, но мне, кажется, тут утечка памяти (this.chatResource.state подписались и не отписались) или я ошибаюсь?
Да, будет утечка. Вообще, для того, чтобы подход работал, нужно привязать жизненный цикл ресурса к компоненту (т.е. ресурс не должен быть синглтоном), тогда мы сможем корректно отписываться и отменять запросы когда они нам больше не нужны.
Upd: в репозитории пример именно такой)
Да, это можно сделать стандартными средствами при дестрое компонента. Есть тудушка - запилить автоматическую отписку (насколько это возможно), но в реальной жизни события использовались не часто, так что и руки пока не доходили
Категорически нерабочее решение. Отписок нет, типизации никакой.
Лично я никогда не использовал ngrx потому что я всегда использовал ngxs (хотя конечно и он не нужен)
Что думаете про MobX? С ангуляром очень неплохо вяжется, нет бойлерплейта, как в NgRx, скорость разработки выше.
В ангуляре и без сторонних стейтменеджеров, довольно все можно сделать.
Angular Resource или почему я никогда не использовал NgRX