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

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

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

15 ответов

17 просмотров

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

Сергей-Тихонов Автор вопроса
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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
22
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта