169 похожих чатов

Привет. А кто нибудь писал свои декораторы на компонент, который

расширяет его мета информацию? Мне в общем нужно через декоратор в компонент запровайдить сервис.

15 ответов

15 просмотров

а как доступ к нему подразумевается делать? к сервису я имею в виду И почему не использовать обычную инъекцию через конструктор?

Сергей-Тихонов Автор вопроса
Oleg Safonov
а как доступ к нему подразумевается делать? к серв...

Я может неправильно выразился... Мне сервис нужно запровайдить в компонент чтоб получить его новый инстанс. @Component({..., providers: [myService]}) Хотел написать декоратор типа @UseMyService который бы в providers компонента, добавил мой сервис. 1. да, можно не заморачиваться и в каждый компонент провайдить ручками. 2. хочется сделать это через декоратор, т.к. сервисов которые я хочу добавить к компоненту возможно будет больше, т.к. данные сервисы могут быть использованы во множестве компонентов, короче хотелось бы сделать код чище. Но судя по ишью https://github.com/angular/angular/issues/13777 такое пока сделать нельзя 😞

Сергей Тихонов
Я может неправильно выразился... Мне сервис нужно ...

а можете задачу описать? Просто не могу придумать, когда есть действительно большое количество компонентов (разных) в каждый из которых нужно свой инстанс какого то общего сервиса)

Сергей-Тихонов Автор вопроса
Oleg Safonov
а можете задачу описать? Просто не могу придумать,...

Если у вас есть опыт работы с React, то наверняка знаете о механизме контекстов. Дак вот, подобное в angular можно сделать через провайдеры и их переопределение на уровне компонента. Вот так выглядит у меня сервис @Injectable({ providedIn: "root" }) export class ThemeService { constructor( @Optional() @SkipSelf() private parentTheme: ThemeService, @Inject(THEME_MODE) private mode, @Inject(DOCUMENT) private document ) {} Мне нужно реализовать механизм темизации. Я инжекчу данный сервис в app.module и получаю глобальные настройки темы. Например у меня есть как-то "тупой" компонент (tooltip), который инжектит данные сервис и получает настройки темы. Есть еще компонент (Hero) который использует где-то внутри себя компонент tooltip и он (Hero) должен переопределить настройки темы для компонента tooltip.

Сергей-Тихонов Автор вопроса
Oleg Safonov
а можете задачу описать? Просто не могу придумать,...

Вот тут экспериментирую https://stackblitz.com/edit/angular-ivy-metadecorator?file=src/app/hello.component.ts

Сергей Тихонов
Я может неправильно выразился... Мне сервис нужно ...

а может тогда вообще проще в каждый компонент в providers передавать вызов какой то вашей функции которая вернёт все сервисы нужные? Вам в случае даже с вашим кастомным декоратором придётся явно в каждом компоненте менять дефолтный декоратор А так просто подмените ему providers типа providers: getMyProviders()

Сергей Тихонов
Если у вас есть опыт работы с React, то наверняка ...

Я правильно понимаю, что в 'умный' компонент нужно провайдить сервис ТОЛЬКО если он хочет перекрыть тему для дочернего?

Сергей-Тихонов Автор вопроса
Oleg Safonov
а может тогда вообще проще в каждый компонент в pr...

Про этот вариант да, знаю, его я сразу сделал, но думал возможно есть способ сделать это через декоратор на компонент.

Сергей Тихонов
Про этот вариант да, знаю, его я сразу сделал, но ...

Мне кажется вариант с перекрытием декоратора менее явный и не уверен, что более удобный)

Сергей Тихонов
Про этот вариант да, знаю, его я сразу сделал, но ...

насколько я знаю сейчас нет "легальных" способов это сделать и тащемта нет смысла заморачиваться. не сделали они еще :)

Сергей-Тихонов Автор вопроса
xxtux Shvets
насколько я знаю сейчас нет "легальных" способов э...

Можно наверное конечно свой билдер написать, но это уже через чур))

Я делал подобную фигню, но она не работает в aot :) Через reflect-metadata можно переопределить типы в конструкторе, например, найти MyService и заменить на MyNewService

Сергей-Тихонов Автор вопроса
Raman Yazvinski
Я делал подобную фигню, но она не работает в aot :...

На сколько я понял, reflect-metadata сейчас deprecated, там используют сейчас makeDecorator

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта