тап-тап-тап-тап-тап-тап-там. напевать как мелодию «в пещере горного короля»
как иначе сделать я не понимаю. сабджект где-то нужно пробрасывать
может нахуй и сразу сигналы?
может. мне бы добиться такого поведения как сейчас есть - только сделать это качественно без тапов
Там ещё пайпы не придумали 😁
ммм какие и зачем?
computed в таком виде максимально уёбищен, точно придумают свои пайпы
да вроде норм, но спорить не буду, на релизе многие потыкают и будет общее мнение
немного отрефакторил уже. можно что-то еще улучшить?
Наверное. описать все декларативно без конструктора и fetchdata, и выкинуть asObservable тк нет в них смысла тут
Итого поток с датой, пара сабжектов и все
чем fetch дата плох?
Да можно и оставить, только убрать сайдэффект с tap
а вот как - я с этими тапами меня тут уже троллят)
Индикацию в loading$ можно упростить используя кастомный оператор indicate вот отсюда https://nils-mehlhorn.de/posts/indicating-loading-the-right-way-in-angular/
И правильно, они там никчему как и подписка
shareReplay не забудь повесить на поток с данными, что бы исбежать повторных вызовов
от подписик не понимаю как избавиться. перенес ее в шаблон - перестало работать
Попробуй подебажить, должно быть что то типо этого: data$=load$.pipe(switchMap(p=>fetchData(p), shareReplay(...)) *ngIf="data$ | async as data"
https://stackblitz.com/edit/angular7-rxjs-l6ecg2?file=src%2Fapp%2Fapp.component.ts,src%2Fapp%2Fapp.component.html что-то сломалось - почему подписка которая в была в компоненте перестает работать в шаблоне?
Так isVisible никогда не триггернется потому дата асинк на отработает потому что этот кусок шаблона не отрендерится потому что isVisible никогда не триггернется...
точно. тогда в шаблоне data$ нужно в самый вверх вынести а все остальное внутри
Ага, и переделать логику isVisible, убрав сайдэффект из потока с данными
хм - тогда блок не покажется пока $data не пришла...а мне бы сразу показать блок а внутри data$
Ну придумай чего нить, вариантов много
что можно придумать - задумка была что visible эти занимается (
Конечно, потомучто шаблон с асинк не рендерится
может тогда способ который когда-то я делал и его затролили *ngIf="{visible: visible | async, data: data$ | async}" ?
А зачем тебе вообще прятать карту?
[class.hidden]=!isVisible
не врублюсь на какой контейнер это навесить? https://stackblitz.com/edit/angular7-rxjs-l6ecg2?file=src%2Fapp%2Fapp.component.ts,src%2Fapp%2Fapp.component.html
Да сделай так и не парься. Только добавь as ctx, что не повторятся с асинк
ngIf={...} as ctx ngIf=ctx.isVisible
можно вас попросить прямо в шаблоне прописать. туплю - не понимаю где и
Ну блииин, с телефона не удобно
На самом деле вам просто нужно отделить isVisible от потока с данными, переключать его не в тэп а отдельно, по клику или что там, тогда он не будет зависеть от подписки на data
вот так вроде сработало: <ng-container class="card" *ngIf="{ visible: isVisible$ | async, data: data$ | async, loading: loading$ | async } as data" > <div class="card" *ngIf="data.visible"> <div *ngIf="data.loading; else dataBlock">Загрузка данных...</div> <ng-template #dataBlock> <div *ngIf="data.data" class="data">{{ data.data.name }}</div> <div *ngIf="data.imageUrl" class="image">{{ data.imageUrl }}</div> <div *ngIf="data.fields" class="fields">{{ data.fields | json }}</div> </ng-template> </div> </ng-container>
благодарю тебя за помощь! все получилось)
Обсуждают сегодня