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

Кто шарит в ДИ, объясните как работает MAT_DIALOG_DATA? Как создать

инжектируемый объект получив его аргументом какого-то метода? Как они вообще это делают?

8 ответов

3 просмотра

когда вы вызываете .open(), вы передаете как аргумент data: {..} это и есть ваш объект, и под капотом библиотека в DI регистрирует этот инстанс по токену MAT_DIALOG_DATA т.о. вы его в этом DI контексте можете получить - const data = inject(MAT_DIALOG_DATA) as IDialogData

Denis-marvel Автор вопроса
Валентин
когда вы вызываете .open(), вы передаете как аргум...

Спасибо. Тут больше интересует как библиотека под капотом регистрирует инстанс по токену. Я так понимаю, что эти данные нужно закинуть в декоратор компонента/директивы. Но у меня так ни разу и не получилось покинуть туда динамические данные. В голове крутится подход с каким-то внутренним сервисом и useFactory, но выглядит слишком переусложненным решением. Может кто знает как это сделать проще?

Denis marvel
Спасибо. Тут больше интересует как библиотека под ...

Так может быть просто глянуть исходники? ) Они конечно замороченные там, но я думаю все-таки получится найти если поискать

Denis marvel
Спасибо. Тут больше интересует как библиотека под ...

как вариант посмотреть исходники DialogService сервис что вы инжектите инстанциируется в томже контексте что и вашкомпонент, т.е. в нем можно сохранить ссылку на data и использовать useFactory я бы наверно пошел таким путем

Denis-marvel Автор вопроса
Ivan Klimenko
Так может быть просто глянуть исходники? ) Они кон...

Думал, что это более-менее известный подход. Что сразу делает совет подобным 'посмотри исходники проекта и увидишь как фабрику написать')) Но судя по всему это _не_ известный подход. Значит буду смотреть рыться в исходниках)

Denis-marvel Автор вопроса
Валентин
screenshot

Спасибо огромное. А я думал моя идея пересложненная. А тут ещё и форвардРеф используют))

Denis marvel
Спасибо. Тут больше интересует как библиотека под ...

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

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Есть предложения, как подобное можно упростить?
Hemul GM
12
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Карта сайта