Size: a a a

Angular - русскоговорящее сообщество

2021 May 08

DT

Denchik Tymokhin in Angular - русскоговорящее сообщество
iif
источник

VK

Vlad Kolebaev in Angular - русскоговорящее сообщество
отфильтровать можно сначала только тру потом свитчмап делать
источник

ЕУ

Евгений Удалов... in Angular - русскоговорящее сообщество
filter(Boolean)
источник

АП

Александр Першин... in Angular - русскоговорящее сообщество
subj$.pipe(
 filter(Boolean),
 switchMap(...)
)
источник

И

Интроверт in Angular - русскоговорящее сообщество
спасибо, сейчас все варианты попробую)
источник

BB

Bogdan Bida in Angular - русскоговорящее сообщество
Это уже для случаев когда надо еще и else, а так фильтра должно хватить и он удобнее
источник

В

Влад in Angular - русскоговорящее сообщество
Подскажите

В сервисе есть BehaviorSubject, на который я подписан в компоненте app-content. В этот компонент включен другой компонент category-list. Я передаю массив категорий:
<app-category-list [parent_id]="id" [categories]="array"></app-category-list>

И когда я добавляю новую категорию, то в списке она не появляется.

Объясните, пожалуйста, почему? Если родительский компонент подписан, то он передаст в дочерний новый массив, и дочерний тоже должен получить новые данные, или нужно в каждом компоненте свою подписку?
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
А как именно добавляете новую категорию?
источник

В

Влад in Angular - русскоговорящее сообщество
В компоненте category-create:
this.MyService.createCategory(obj);

А в сервисе:
   createCategory(objectToCreate)
   {
       let categories = this.categories.getValue();
       categories.push(objectToCreate);
       this.categories.next(categories);
   }
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
ради эксперимента попробуй this.categories.next([...categories, objectToCreate])
источник

В

Влад in Angular - русскоговорящее сообщество
Не понял, а что за точечки в начале?

У меня проблем не в том что категория не создается. Она создается. Проблема в том что контент не обновляется автоматически
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
а еще попробуй [categories]="myService.categories|async"
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
попробуй точечки =) скорее всего поможет
источник

В

Влад in Angular - русскоговорящее сообщество
я попробую, а как они называются? загуглю хоть
источник

V

Viktor in Angular - русскоговорящее сообщество
Точечки в начале - спред оператор
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
array destructing смысл в том что так ты поместишь в сабджект новый указатель, и тогда сработает ChangeDetection
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
точно, этож spread а не destructing
источник

V

Viktor in Angular - русскоговорящее сообщество
))
источник

В

Влад in Angular - русскоговорящее сообщество
Что-то не работает у меня. Попробую объяснить иначе. У меня такая структура компонентов:
content -> category-list -> category-single -> category-list -> category-single ...

Т.е. у категорий могут быть дочерние категории, сколько угодно уровней. Я подписал только самый первый компонент content на обновления. А в дочерних передаю только сам массив:
<app-category-list [categories]="array"></app-category-list>

Когда я добавляю, то вижу в консоли что массив увеличился на 1 элемент. Но на экране он не появляется. Нужно перейти на другую страницу и вернуться, чтобы увидеть новую категорию.

Возможно ли сделать так, чтобы обновлялись автоматически все виды? Или нужно каждый компонент подписывать на данные в сервисе?
источник

V

Viktor in Angular - русскоговорящее сообщество
Я бы асинк пайп использовал и не подписывался в компоненте на ваш сабджект чтоб получить данные (то что вам советовали в комментарии выше)
источник