мне экземпляр сервиса.
Сделал пример, но что-то не работает - не пойму как решить. Помогите с решением. Спасибо.
https://stackblitz.com/edit/angular-ivy-aypj9k?file=src%2Fapp%2Fwrapper%2Fwrapper.component.ts
Ну давай разберем написанное тобой по частям. useFactory - принимает функцию, с аргументами, которые ты передал в deps. ActivatedRouter туда же можно положить. Используя new ты не подтягиваешь зависимости из какого-то источника, а создаешь их на месте. Возвращая Obserbavle ты его в шаблоне получишь. iff первым аргументом функцию сравнению, а вторым и третьи должен возвращать обсервебел. И там он избыточен, как и свитч мап. Ты мог бы сразу возвращать в мап нужный сервис.
Огромное спасибо за детальный разбор! Не совсем понял «Возвращая Observable ты его в шаблоне получишь.»
У тебя useFactory возвращает обсервебл, по токену ты его и получишь. Тоесть не сервис, который тебе нужен, а обсервебл, на который ещё подписаться надо и получить его
Теперь все понятно. Вы правы. Еще раз Спасибо!
Скажите можно ли такой провайдер завернуть в сам токен, что-то типа такого export const TOKEN = new InjectionToken<General>('token.general', { providedIn: 'root', factory: () => { const twoService = inject(TwoService); const oneService = inject(OneService); const activatedRoute = inject(ActivatedRoute); const path = activatedRoute.snapshot.url[0]?.path; return path === 'one' ? oneService : twoService; }, });
Обсуждают сегодня