• Рефакторинг if'ов, в чем ошибка?

    Xuxicheta
    @Xuxicheta
    инженер
    const user_choice = document.getElementById('radiobutton').checked ?  "EAGLE" :  "TAILS";
    Ответ написан
  • Как отслеживать изменение переменной в angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Забавно, но такая очевидная и часто употребимая вещь почему то отсутствует в большинстве статей про азы реактивных форм.

    Кроме value у любого контрола есть обсервабл valueChanges. Подписываешься на него и получаешь изменения.
    И у группы тоже есть, получишь изменение всей группы.
    Ответ написан
    2 комментария
  • Переход с React на Angular, стоит ли?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    1) правда ли изучаешь один раз и применяешь везде?

    да.
    У нас не принято собирать разнообразные велосипеды из набора либ. Разве что стейты vs сервисы :)
    Меня всегда это вымораживало в реакте, чтобы реализовать привычные вещи приходится тащить черти что и еще выбирать самому. А чтобы выбирать нужно уже знать варианты.

    2) как обстоят дела в крупных проектах?

    По разному, но в целом они похожи все. Если разработчики достаточно опытны в ангуляре и ООП, чтобы писать нормально.

    Архитектура приложений будет больше зависеть не от Ангуляра, а от знакомства разрабов с принципами построения архитектур, которые в целом несложны.
    Сам Ангуляр ничего не навязывает, Nuxt в этом плане даже более структурирован. Однако и так все само получается примерно схоже. Отчасти поэтому nuxt/next для ангуляра не существует.
    Еще популярен Nx, который помогает собрать монорепу из angular+nestjs например.

    стоит ли?

    Определенно стоит ознакомиться. Некоторые практики, без которых Ангуляр сложно представить, можно использовать и в react. Например di, если еще не используете.
    Ответ написан
    Комментировать
  • Что за непонятное поведение в Angular?

    Xuxicheta
    @Xuxicheta
    инженер
    вопрос к криворуким разработчикам apollo, которы вписали react в зависимости
    Ответ написан
    Комментировать
  • Как перенести подписку на стрим из метода, вызываемого юзером, в ngOnInit()?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер

    Слышал мнение, что плохая практика - подписываться на стрим внутри метода, который вызывается, скажем, по клику на кнопку.

    Первый раз слышу.

    Но если угодно.

    deleteShredderEvt = new Subject();
    
    ngOnInit() {
      this.deleteShredderEvt.pipe(
        switchMap((shredderId) => this._shredService.deleteShredder(shredderId))
      )
        .subscribe();
    }


    <button (click)="deleteShredderEvt.next(shredderId)"></button>


    че нить такое. Вместо подписки можно инициировать событие, а в он-инит подписаться на цепочку, начинающуюся с этого события
    Ответ написан
    Комментировать
  • Как реализовать одну общую шапку для всех страниц в Angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    шаг 1. Делаешь сервис где хранишь данные
    private data = new BehaviorSubject(null);
    
      setData(data) { this.data.next(data) }
      selectData() { return this.data.asObsevable() }

    Понятно да, как с этим обращаться?

    шаг 2. Выводишь данные в компоненте
    data = this.myService.selectData()

    <p> {{ data | async }} <p>

    И все, никаких лишних подписок и писанины не нада. Все само будет обновляться, когда вызовешь setData.
    И не напихивай много данных в один сервис, лучше много маленьких сервисов.
    Чтоб одинаковое не писать, можно сделать абстрактный класс с этими методами и наследоваться от него.
    А можно взять Akita где уже все готово и много чего еще для удобной работы с данными
    Ответ написан
    2 комментария
  • Как схлопнуть собтия в стриме RXJS по времени?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    auditTime, насколько я понял из описания.

    никаких схлопываний не надо, takeLast и concatAll работают вообще не так
    Ответ написан
  • Правда ли что Angular имеет больший порог входа чем React?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Правда ли что энтерпрайз фреймворк имеет больший порог входа чем шаблонизатор? Конечно правда, в нем просто намного больше всего.
    "спорный" код можно встретить везде, хотя джуны на ангуляре пишут примерно одинаково. Но в Ангуляре их поменьше, за счет как раз порога входа. На Rx многие ломаются :)
    Ответ написан
    Комментировать
  • Как наследовать компонент angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Неправильный подход. Выделяете общие части в отдельные компоненты, для страниц делаете отдельные компоненты и вставляете ваши части в них.
    Наследовать компоненты не нужно.
    Ответ написан
    2 комментария
  • Async/Await в цикле (JS)?

    Xuxicheta
    @Xuxicheta
    инженер
    Записать все получившиеся промисы в массив, а потом await Promise.all(promisesArray)
    Ответ написан
    Комментировать
  • Как поймать fetch реквест в интерсепторе?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Можно подменить глобальный fetch своей оберткой, и в ней выполнять нужный вам код, т.е. внутри выполнить оригинальный fetch и после него вызывать свои функции.

    Но может стоит посмотреть сам сниппет, может у него события какие нормальные есть?
    Ответ написан
    1 комментарий
  • Стек MEAN ( Можно ли заменить MongoDB на MySQL )?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    нет никакого стека MEAN. Это просто свободно заменяемый набор инструментов, причем монгу вообще нет смысла брать. И родилась эта аббревиатура еще во времена первого ангуляра и вырвиглазной ноды, еще до nest.js и тайпскрипта.
    Все мануалы того периода сейчас уже нельзя воспринимать всерьез.
    Ответ написан
    3 комментария
  • Когда следует использовать UseExistingProvider?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    1) useExisting не создаёт новый экземпляр зависимости, а создаёт ссылку на него под другим классом, служащим ему заменой (алиасом).


    не ссылку и не под другим классом.
    Когда провайдишь сущность, ты сообщаешь di-контейнеру (у нас это инжектор) di-токен, по которому инжектор выдает тебе сущности.
    Класс для него это частный случай di-токена.
    Можно ведь и так сделать
    providers: [{
      provide: 'doc',
      useExisting: DOCUMENT
    }]

    Подробнее тут https://angular.io/guide/dependency-injection-prov...

    2) useExisting следует использовать вместе с useClass

    Опять же, не обязательно класс, главное чтобы сущность связанная с токеном в useExisting была уже известна инжектору.

    3) класс-алиас, который внедряем должен полностью соответствовать интерфейсу оригинального класса на который мы собираемся заменить.

    Не обязательно, инжектор твои типы не проверяет, просто выдает то что он запомнил.

    А по главному вопросу
    Когда следует использовать UseExistingProvider?

    Когда тебе нужно существующую сущность предоставить под другим токеном. Допустим какие-то другие классы инжектят себе зависимости по им известному токену, вот, чтобы они по нему нашли наш инстанс.
    В ангуляре полно такого, HttpClient инжектит HTTP_INTERCEPTORS, директивы форм инжектят NG_VALIDATORS, бутстрап инжектит APP_INITIALIZER и т.д.

    Вместе с именно классами useExisting практически не используется, не вижу смысла.
    Ответ написан
    Комментировать
  • Есть ли возможность использовать Angular локально на секцию на странице?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Можно сбилдить в веб-компонент с помощью Angular Elements и вставить куда угодно.
    вот
    Ответ написан
    Комментировать
  • Это нормально что Angular после сборки отображает свои теги в разметке?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    да
    для браузера и поисковиков это обычные кастомные элементы, они нейтральны.
    Для семантики можно role прописывать.
    Ответ написан
    Комментировать
  • Как вернуть первое значение кастомной валидации (NG_VALIDATOR) при использовании ngIf?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Надо очищать валидаторы, если удаляется директива, их накладывающая. Само оно это не делает.

    Это вообще печально, валидация контрола у нас производится одной функцией, а не массивом функций. Несколько валидаторов при их сетапе сливаются в один (под капотом вызывается Validators.compose со старым валидатором и с новым), поэтому удалять вавлидаторы произвольно нельзя.
    Ну и директива, провайдящая валидатор точно так же не может снять свой валидатор с контрола при ее ngOnDestroy.

    Поэтому каждый раз, когда вы рендерите свой компонент, его валидатор добавляется ко всем прочим и останется в памяти даже после уничтожения компонента (и удержит вроде бы удаленный CVA в памяти, это утечка). Сами значения будут прилетать в новый CVA, а валидатор все равно будет цеплять всех.

    вот пример как фиксить https://stackblitz.com/edit/angular-ivy-va9xuk
    Ответ написан
    1 комментарий
  • Как сделать POST запрос, крик души?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    this.http.post(url, {
      login, password
    })


    ниче не надо больше.
    Подписываешься, реквест отправляется, json в body будет автоматом.
    Ответ написан
  • Как получить доступ к переменной из другой компоненты?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Не нужно получать доступ к полю компонента, нужно держать эти данные в сервисе, а в компоненте забирать их и отображать.
    Ответ написан
    2 комментария
  • Почему многие используют в angular observables в сервисах?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Observable - наблюдаемый объект. Наблюдаемый.
    Его потребитель всегда может знать когда произошли изменения, запустить обновление вьюшки, плюс выстроить свои потоковые цепочки из операторов.
    А если ты просто что-то в сервисе там изменил, ангуляр скорее всего об этом не узнает. То что у тебя работает, значит что где-то в это время сработала проверка изменений (скорее всего глобальная), т.е. просто повезло.
    Ответ написан
    Комментировать
  • Как получить значение хедера в ответе сервера на Angular Http Client?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    по дефолту запрос возвращает json.
    Впишите observe: "response" в опциях запроса. Третий аргумент
    Ответ написан
    Комментировать