Size: a a a

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

2021 March 18

AM

Alexandr Manyunin in Angular - русскоговорящее сообщество
Не поможет мне это походу. У меня начальные фильтры например {address: []}. Потом с бека приходит {address: ['Москва']} она ставится и запрашивается, а потом пользователь может убрать адрес и нужно запросить {address: []} ))) Решил начальные фильтры проставлять сразу в компоненты, не знаю костыль или нет. А уже нормальные из service из потока тянуть и делать запрос.
источник

НН

Никита Наумов... in Angular - русскоговорящее сообщество
Alexandr Manyunin
Ребята, можеть есть идеи? Форма берет фильтры из behaviorSubject(initFilters). Сначала проставляются пустые фильтры, затем с бека приходят новые, передаются в subject, далее в форму и происходит submit формы. Чтобы не запрашивать с пустыми фильтрами делаю skip(1). Работает норм, но когда компонент разрушается и заново появляется, то фильтры уже приходят актуальные и надо сделать запрос, но т.к. skip(1) стоит, то он ломает. Получается мне то надо на вторых пришедших фильтрах сделать запрос, то на первых. И чет не знаю как это разрулить.
Замените behaviorSubject на replaySubject(1) тогда не будет необходимости в начальных значениях
источник

НН

Никита Наумов... in Angular - русскоговорящее сообщество
Alexandr Manyunin
Не поможет мне это походу. У меня начальные фильтры например {address: []}. Потом с бека приходит {address: ['Москва']} она ставится и запрашивается, а потом пользователь может убрать адрес и нужно запросить {address: []} ))) Решил начальные фильтры проставлять сразу в компоненты, не знаю костыль или нет. А уже нормальные из service из потока тянуть и делать запрос.
У Вас в потоке массивы?
источник

AM

Alexandr Manyunin in Angular - русскоговорящее сообщество
Никита Наумов
У Вас в потоке массивы?
В потоке объект
источник

SA

Saqhan Abaev in Angular - русскоговорящее сообщество
я пытаюсь понять почему не приходят данные с json файла)  я правильно понимаю что getData ничего не получает?  раз консоль  в subscribe не срабатывает вообще ?
источник

НН

Никита Наумов... in Angular - русскоговорящее сообщество
Alexandr Manyunin
В потоке объект
Почему бы не бросить тогда начальным значением объект с пустым массивом и проверять фильтром на длину этого массива?
источник

AM

Alexandr Manyunin in Angular - русскоговорящее сообщество
Никита Наумов
Замените behaviorSubject на replaySubject(1) тогда не будет необходимости в начальных значениях
Хм, спасибо, хороший вариант. Сейчас сделал BehaviorSubject(null) и от него filter(value => !!value).  Но начальное значение для формы тогда мимо сабжекта все равно идет.
источник

AM

Alexandr Manyunin in Angular - русскоговорящее сообщество
Никита Наумов
Почему бы не бросить тогда начальным значением объект с пустым массивом и проверять фильтром на длину этого массива?
Это сабжект со значениями формы. Если я форме ничего не передам она развалится.
источник

M

Maksim in Angular - русскоговорящее сообщество
Saqhan Abaev
я пытаюсь понять почему не приходят данные с json файла)  я правильно понимаю что getData ничего не получает?  раз консоль  в subscribe не срабатывает вообще ?
вы делаете http запрос по относительному пути. console.log в вашем subscribe не срабатывает потому что http запрос завершается с ошибкой - сайта "../../../styles" не существует в природе.
источник

НН

Никита Наумов... in Angular - русскоговорящее сообщество
Alexandr Manyunin
Это сабжект со значениями формы. Если я форме ничего не передам она развалится.
То есть там и фильтры и значения для формы?
источник

В

Валентин in Angular - русскоговорящее сообщество
подскажите, насколько корректно таким способом получать параметры в родительской компоненте? ``this.subscription.add(
     this.activatedRoute.children[0].params.subscribe(params => console.log(params))
   );``
источник

SA

Saqhan Abaev in Angular - русскоговорящее сообщество
Maksim
вы делаете http запрос по относительному пути. console.log в вашем subscribe не срабатывает потому что http запрос завершается с ошибкой - сайта "../../../styles" не существует в природе.
а как запросить правльно ? обычно вебшторм подсказывал при указывании пути, но сейчас я закинул в ту же папку что и сам сервис лежит и указал ./themes.json - тот же результат. И как можно проверить получает ли он вообще что нибудь?)
источник

AM

Alexandr Manyunin in Angular - русскоговорящее сообщество
Никита Наумов
То есть там и фильтры и значения для формы?
У меня это одно и тоже. Значения формы будут являться фильтрами для запроса 1 в 1
Хотя нет, по бизнесу, это фильтры с которыми делается запрос, а я пытаюсь запихать в них начальные фильтры для формы, с которыми запрос делать не надо. Спасибо за вопросы, помогли подумать что я делаю)
источник

M

Maksim in Angular - русскоговорящее сообщество
Saqhan Abaev
а как запросить правльно ? обычно вебшторм подсказывал при указывании пути, но сейчас я закинул в ту же папку что и сам сервис лежит и указал ./themes.json - тот же результат. И как можно проверить получает ли он вообще что нибудь?)
Вам нужно скопировать ваши json файлы в dist папку, правильно прописав "assets" в angular.json, и делать запрос от корня
Смотрите вкладку Network (сеть) куда запрос идет
источник

SA

Saqhan Abaev in Angular - русскоговорящее сообщество
Maksim
Вам нужно скопировать ваши json файлы в dist папку, правильно прописав "assets" в angular.json, и делать запрос от корня
Смотрите вкладку Network (сеть) куда запрос идет
спасибо большое!
источник

MK

Mikhail Kamakhin in Angular - русскоговорящее сообщество
Ребята, смотрите, я написал такое:

  getBanner$ = this.cmsService.getDesktopBanner().pipe(
   takeUntil(this.unsubscribe$),
   map(res => _.cloneDeep(res)),
   map(res => res.map(el => {
     el.image = this.domSanitizer.bypassSecurityTrustUrl(el.image);
     return el;
   }))
 );

 ngOnInit(): void {

   this.getBanner$.subscribe((res) => {
     this.imageList = res.slice();
     console.log(this.imageList);
     if (this.imageList.length > 1) {
       this.intervalSlider(); // тут я типа запускаю слайдер
     }
   });
 }
А мне говорят:
С таким подходом переменна imageList не имеет смысла, так можно напрямую использовать getBanner$. То есть вместо подписи использовать оператор tap (чтобы запустить интервал). либо же в map. Ну и тогда
getBanner$ превратится в banners$

  getBanners$ = this.cmsService.getDesktopBanner().pipe(
   takeUntil(this.unsubscribe$),
   map(res => this.configUtilService.getArray(res)),
   map(res => _.cloneDeep(res)),
   // map((res: any) => res.sort((a, b) => a.order - b.order)),
   map(res => res.map(el => {
     el.image = this.domSanitizer.bypassSecurityTrustUrl(el.image);
     return el;
   })),
   tap((res: any[]) =>  {
     if (res.length > 1) {
       this.intervalSlider();
     }
   })
 );
Тогда не нужна начинка ngOnInit(). А в шаблоне *ngFor="let image of (banners$ | async); let i = index"

Моя мысль:
Я считаю, что в pipe не нужно делать действия, которые могут изменять шаблон компонента, плюс это усложняет тестирование.
Что думаете?
источник

AS

Artem Sitnikov in Angular - русскоговорящее сообщество
Коллеги, сразу прошу прощения. А есть группа по найму ребят на ангуляре. Клиент сменил стек, горит сильно. Проект болльшой, за хорошие
источник

R

Roman in Angular - русскоговорящее сообщество
Даниил Зеликов
Кто нить может подсказать инструмент, который способен сделать что-то такое?
mapbox
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Artem Sitnikov
Коллеги, сразу прошу прощения. А есть группа по найму ребят на ангуляре. Клиент сменил стек, горит сильно. Проект болльшой, за хорошие
источник

AS

Artem Sitnikov in Angular - русскоговорящее сообщество
Спасибо
источник