Ответы пользователя по тегу Angular
  • Не работает post form angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Причем тут вообще Angular? action это аттрибут хтмл-тэга form.
    action+method видит браузер и отправляет содержимое формы по указанному адресу. У вас был указан только method, поэтому браузер ничего никуда не слал, т.к. не знал адреса.

    ng-pristine ng-valid это классы накладываемые Ангуляром при проверке формы. Т.к. форма у вас никак ангуляром не обрабатывается, проверки пустые и всегда пройденны, форма типа валидна. Эти классы ни на что не влияют и ничего тут не значат.
    Ответ написан
    Комментировать
  • Как правильно организовать архитектуру сервисов в Angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    https://refactoring.guru/ru/design-patterns/mediator

    Если гет и пост относятся к одной сущности, то можно засунуть их в тот же entity.service.ts. Если в нем стало слишком много таких методов, то можно вынести в entity-mediator.service.ts. Ну или как то похоже.
    Если к разным доменам, то создается отдельный сервис, относящийся уже к области в которой он вызывается. Т.е. к потребителю. И там уже обращаешься к ентити-сервисам.
    Ответ написан
    Комментировать
  • Почему не уничтожается сервис при уничтожении родительского сервиса?

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

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    А почему бы не сделать так, зачем эти токены строкой?
    class ScreenMediaDevicesService extends MediaDevicesService {}
    class CameraMediaDevicesService extends MediaDevicesService {}
    
    providers: [ScreenMediaDevicesService, CameraMediaDevicesService ]
    Ответ написан
  • Как сделать айди Observable?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    export class CharacterDetailsComponent implements OnInit {
      readonly id$ = this.route.paramMap.pipe(map(paramMap => paramMap.get('id'));
      ....


    Все
    Ответ написан
  • Как в angular с помощью cli создать модуль который автоматически попадёт в imports в app.module?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    ниче не понял, но вроде опция --module позволяет указать куда импортируется созданное.
    Но по моему это бесполезно, и вообще в AppModule должен быть минимум импортов, только необходимое. Из ui-либ вообще не должно быть ничего.
    Ответ написан
    Комментировать
  • Как на Angular 14 получить DOM элемент?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    на этапе ngOnInit элемент еще не существует и ViewChild не присвоен.
    Можно обратиться к нему позже, после ViewInit или можно добавить настроечку @ViewChild('video', { static: true})тогда он будет доступен в ините
    Ответ написан
  • Как вызвать метод одного компонента из другого в Angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Получать инстансы компонентов можно
    1. Нижележащего через декораторы ViewChild, ContentChild и т.п.
    2. Вышележащий через инжект в конструкторе. Провайдить его никуда не надо, он будет сам получен из дерева вью-инжекторов.

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

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    function filterList() {
      return filter(list=> list!= null && list.length > 0)
    }


    можно использовать в пайпе.
    Остальное - подписка и тейкантил - не нужно
    Ответ написан
    Комментировать
  • Как правильно работать с массивами в RxJs?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    getParameters(ids: (string|number)[]): Observable<MyResult[]> {
      return forkJoin(ids => ids.map(id => this.packageService.getPackage(id)))
    }


    Типичный параллельный запрос с получением пачки результатов.
    Подписка со складыванием результатов в массив не нужна, промисы вообще не нужно никуда тащить, сразу шли в игнор странных чуваков с промисами и прорвой бессмысленного кода :)
    Внутри this.packageService.getPackage возможно придется сделать обработку ошибки, т.к. если в forkJoin попадет ошибка, то сломается вся пачка, ну так же как и в случае Promise.all.
    Ответ написан
    3 комментария
  • Как передать шаблон с event binding в directive?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    В принципе можно скостылить какого-нибудь уродца, но смысла большого не вижу.
    Предпочтительней два пути.
    1. Отказаться от tippy в пользу основанной на ангуляре либы.
    2. Взять готовую обертку, вот angular-tippy нагуглилось. Может еще что есть, надо смотреть.
    Ответ написан
    Комментировать
  • Как использовать SwitchMap RxJs для не "Observable" функций и отменить предыдущий запрос?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    switchMap не отменяет никаких запросов. Он отписывается от потока.
    А уже HttpClient так устроен, что отменяет запрос при отписке. Т.е. вызывает XMLHttpRequest.abort() когда срабатывает TearDown logic.

    Если вы используете fetch, а не xhr, то его тоже можно завернуть в обсервабл. Что-то типа такого

    function request(url) {
      return new Observable(observer => {
        const controller = new AbortController()
        const signal = controller.signal
        signal.addEventListener("abort", () => observer.complete());
    
        fetch(url, { signal  })
                .then(res => {
                    observer.next(res);
                    observer.complete();
                  })
               .catch((err) => {
                    observer.error(err);
                    observer.complete();
                });
    
          return () => controller.abort();
      });
    }

    Писал по памяти, возможно это даже работает :)
    При создании Observable переданный ему коллбэк возвращает логику, которая будет выполнена при отписке от него, т.е. teardown
    Ответ написан
    1 комментарий
  • Как в RxJs выполнить функцию если значение BehaviourSubject true, а если false - то ждать пока не станет true?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    source.pipe(
      switchMap( value => myBooleanSubject.pipe(filter(Boolean), mapTo(value)))
    )
      .subscribe(value => ...)
    Ответ написан
    Комментировать
  • Какое преимущество при использовании внедрения зависимости?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    В твоем примере зависимость создается внутри класса, а в примере выше зависимость уже создана и передается в класс при создании его экземляра.

    В Ангуляре и Несте созданием заведует инжектор, который не просто создает, а следит еще за дочерними зависимостями и создает их тоже, в момент когда понадобились.

    Так же di предоставляет больше гибкости, инжектор это своего рода внешняя переменная, которую можно подменить. Что удобно при тестировании или при использовании в контексте.
    Ответ написан
    Комментировать
  • За сколько времени можно выучить основу Angular, если хорошо знаю React js?

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

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    ниче не понятно, чего куда.
    Возможно вам поможет понимание того, как работает прокси.

    При запуске дев сервера мы запускаем сервер на ноде который умеет слушать сеть по указанному порту и отдавать статические файлы, собранные вебпаком.
    Далее в браузере мы отправляемся по ссылке типа "/api" которая пойдет на тот же самый хост и порт, на котором работает страничка. Этот запрос придет туда же, откуда страница взята, т.е. на наш nodejs сервер.
    И там включается разбор запросов, который говорит "ага, вот адрес /api у нас должен проксироваться вот сюда" и сервер на ноде делает самостоятельно запрос по указанному в proxy конфиге адресу, передавая туда же все данные из запроса. Получив ответ, он отправит его под видом ответа от ноде-сервера, который попадет в браузер.

    Зачем вообще нам прокси? Чтобы браузер считал что он никуда далеко не ходит, и OPTIONS не слал. И для того чтобы лишние пути во фронте не прописывать, изменить адреса бэкендов для разработки можно подсунув другой конфиг.

    А теперь какие такие другие url? Если пойти из браузера по другому url в запущенный прокси он не попадет никогда, если не совпадет айпи адрес хоста и порт.

    Прокси поможет развести запросы к разным бэкендам, так, что со стороны браузера они выглядят как уходящие к одному хосту.
    Причем тут разные фронтовые аппы вообще не понятно.
    Ответ написан
  • Как можно определить класс, который имплементирует интерфейс через html?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    потому что implements существует только в typescript, в виде помощи добрым советом программисту, и исчезает при компиляции.
    Ответ написан
    Комментировать
  • Как изолировать модуль администратора от всего сайта на Angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    выглядит как nested applications
    https://medium.com/disney-streaming/combining-mult...

    т.е. вам нужно сделать сначала корневой апп, вставить туда существующий, и добавить еще админский сбоку.
    Ответ написан
    3 комментария
  • Зачем использовать провайдер в компоненте?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    1. импорт ничего не значит. Это просто получение ссылки в текущую область видимости. Этим занимается вебпак.
    2. providers - указание инжектору, что он должен знать вот о таких сущностях. В данном случае для локального инжектора, к которому имеет доступ текущий компонент и его вложенные.
    Этот инжектор создается перед созданием компонента и умирает после. Также, при умирании будет вызван хук ngOnDestroy у всех инстансов провайдеров в этом инжекторе.
    3. Указывая в конструкторе тип, мы сообщаем инжектору какие данные мы хотим получить (тут HeroServiceProvider это токен, т.к. указатель), перед тем как создать эксземпляр класса, а конкретно HeroesComponent.
    Инжектор смотрит есть ли у него такие, а если нет, то создает и передает в конструктор. Инстанс HeroServiceProvider будет создан и виден только в HeroesComponent или его вложенных.
    Ответ написан
    Комментировать
  • Как в приложении Angular загружать разные модули для админа и обычного пользователя?

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