Size: a a a

2020 October 16

Alex Ьтьь in Angular Kyiv
Глянул быстро там импортит компьютед какойто, выглядит так что автор под вью жс
источник

Alex Ьтьь in Angular Kyiv
Решил какойто сахарок на основе rxjs сделать
источник

Alex Ьтьь in Angular Kyiv
А в самом вью комьюнити наоборот разговоры что мол есть rxjs для реактивности  только сильно сложная либа
источник

Sergey Фrolov in Angular Kyiv
Да, не только под вью. Сейчас такое модно. Но с остальными операторами смотрится чужеродно
источник

Alex Ьтьь in Angular Kyiv
Мне из статьи непонятно какую именно проблему решает либа
источник

Alex Ьтьь in Angular Kyiv
Выглядит как закос под вью жс для меня и все, зачем нужно, что поможет улучшить, зачем тащить в проект? Непонятно
источник

Alex Ьтьь in Angular Kyiv
Ну если это просто эксперимент то приколько, но из статьи и так не понятно в чем ценность такого сахара в rxjs, во всяком случае мне xD
источник

ОС

Олександр Савуловськ... in Angular Kyiv
Добрый вечер. Подскажите, пожалуйста. У меня есть сервис providedIn: 'root'. В нем есть метод получения данных с сервера (справочник). При открытии карточки задачи вызывается метод и делается подписка. Как не делать запрос на сервер несколько раз? Читал и пробовал shareReplay(), но все равно отправляется запрос. Спасибо.
источник

Sergey Фrolov in Angular Kyiv
Можно просто сохранить состояние через BehaviorSubject/ReplaySubject
https://blog.angulartraining.com/how-to-cache-the-result-of-an-http-request-with-angular-f9aebd33ab3
источник

Sergey Фrolov in Angular Kyiv
Ну или да, shareReplay(1)
источник

ОС

Олександр Савуловськ... in Angular Kyiv
Sergey Фrolov
Ну или да, shareReplay(1)
Подскажите, что я не так делаю
 
   getRegistryTaskPlan(): Observable<RegistryTaskPlan[]> {

       const q: RequestBody = {
           modelName: 'KPI',
           calledMethod: 'getRegistryTaskPlan',
           methodProperties: {
               dtBeg: this.srvService.convertDate(this._mainRangeDates[0]),
               dtEnd: this.srvService.convertDate(this._mainRangeDates[1]),
               workmanId: this._workmanId
           }
       };

       return this.api.post(q)
           .pipe(
               map(({response}) => response),
               shareReplay(1)
           );
   }
источник

Sergey Фrolov in Angular Kyiv
Олександр Савуловський
Подскажите, что я не так делаю
 
   getRegistryTaskPlan(): Observable<RegistryTaskPlan[]> {

       const q: RequestBody = {
           modelName: 'KPI',
           calledMethod: 'getRegistryTaskPlan',
           methodProperties: {
               dtBeg: this.srvService.convertDate(this._mainRangeDates[0]),
               dtEnd: this.srvService.convertDate(this._mainRangeDates[1]),
               workmanId: this._workmanId
           }
       };

       return this.api.post(q)
           .pipe(
               map(({response}) => response),
               shareReplay(1)
           );
   }
Нужно сохранить в переменную. Тут ты каждый раз делаешь вызов функции и пересобираешь запрос/стрим
источник

Sergey Фrolov in Angular Kyiv
Понимаешь в чем дело?
источник

ОС

Олександр Савуловськ... in Angular Kyiv
Sergey Фrolov
Понимаешь в чем дело?
Не совсем.
источник

Sergey Фrolov in Angular Kyiv
Олександр Савуловський
Не совсем.
ShareReplay по факту это такое хранилище. Само по себе оно тоже должно быть привязано к переменной/проперти в классе.
У тебя просто ссылка на нее не закреплена к кому ни новый вызов порадаждает новый вызов post() c новым хранилищем, ссылку на которое ты сразу передаешь вызывающему.
источник

Sergey Фrolov in Angular Kyiv
Посмотри пример выше по ссылке. Там к конструкторе есть инициализация вызова и дальше уже все остальные подписываются на результат
источник

Sergey Фrolov in Angular Kyiv
Если тебе нужно делать вызов post не сразу, тогда нужно организовать дополнительную проверку в новом методе, который или вызовет этот, получит стрим, сохранит и отдаст. Или если стрим был вызван ранее и уже есть проперти, то его.
источник

Sergey Фrolov in Angular Kyiv
a$: Observable
private _getRegistryTaskPlan(){...}

getRegistryTaskPlan(){
this.a$ =
this.a$ ?? this._getRegistryTaskPlan()
return this.a$
}
источник

Sergey Фrolov in Angular Kyiv
А так понятно?
источник

ОС

Олександр Савуловськ... in Angular Kyiv
Спасибо! С примером + пояснением -теперь  принцип понятен.
источник