Size: a a a

Angular - русскоговорящее сообщество

2020 February 16

V

Viktor in Angular - русскоговорящее сообщество
Time is the side effect
finalize не подходит?
Не знаю  не пробовал, сейчас почитаю доку по этому оператору, спасибо!
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Какие есть способы реализации полиморфных компонентов?
Например, есть некая сущность платежа, и платёж может быть за свет либо за воду.
Соответственно надо отобразить сумму платежа, и в зависимости от типа отобразить различную суб-инфо
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
Какие есть способы реализации полиморфных компонентов?
Например, есть некая сущность платежа, и платёж может быть за свет либо за воду.
Соответственно надо отобразить сумму платежа, и в зависимости от типа отобразить различную суб-инфо
Ну ты можешь например в компоненте PaymentInfo, в зависимости от типа платежа, рендерить соответственный дочерний компонент. Какие еще есть идеи?
источник

G

Galeups in Angular - русскоговорящее сообщество
🧤 Andrei Kapytau
Хороший проект на котором включена проверка компилятора на то что не будет рантайм ошибок с undefined объектом.
А как тогда быть с асинхронными данными, ведь на момент инициализации компонента, там ничего нет. Или я не о том?
источник

🧤K

🧤 Andrei Kapytau in Angular - русскоговорящее сообщество
Galeups
А как тогда быть с асинхронными данными, ведь на момент инициализации компонента, там ничего нет. Или я не о том?
Речь об инпутах. Из обычно или через ! оператор или через инициализацию. Ну и через асинк пайп, без ручных сабскрайбов
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Sergei Sergeevich
Ну ты можешь например в компоненте PaymentInfo, в зависимости от типа платежа, рендерить соответственный дочерний компонент. Какие еще есть идеи?
Да я тоже к этому решению пришёл, через ngSwitch. Но тут ещё такой момент - есть ещё форма создания платежа, которая тоже принимает разные суб-данные в зависимости от типа)
А ещё при клике на компонент платежа надо по-разному обрабатывать
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
Да я тоже к этому решению пришёл, через ngSwitch. Но тут ещё такой момент - есть ещё форма создания платежа, которая тоже принимает разные суб-данные в зависимости от типа)
А ещё при клике на компонент платежа надо по-разному обрабатывать
А пусть клик слушает как раз дочерний компонент, со своей логикой
источник

G

Galeups in Angular - русскоговорящее сообщество
🧤 Andrei Kapytau
Речь об инпутах. Из обычно или через ! оператор или через инициализацию. Ну и через асинк пайп, без ручных сабскрайбов
Спасибо, я чёт оператор ! первый раз увидел у инпута, обычно только для отрицания использовал. Спасибо буду знать
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Sergei Sergeevich
А пусть клик слушает как раз дочерний компонент, со своей логикой
То есть просто прокидывать клик?
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
То есть просто прокидывать клик?
А, если не можешь повесить клик на дочерний компонент через шаблон то можно и через viewChild метод дергать например
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Как всегда вариантов уйма, бест солюшн нету :)
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
А как быть с тем, что набор типов - статичен и заранее известен, и под каждый тип надо реализовать набор компонентов? Есть ли какой-то способ описать интерфейс что-ли?
Ну вот есть тип платежа - за свет. У него обязательно должен быть вью для отображения в списке платежей, а также обязательно должна быть саб-форма для создания платежа.
И когда добавляем новый тип, у него всё то же самое должно быть
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Sergei Sergeevich
Как всегда вариантов уйма, бест солюшн нету :)
Да я не то что бы бест ищу, я просто только вариант с ngSwitch и нашёл, но он не покрывает задачу)
источник

🧤K

🧤 Andrei Kapytau in Angular - русскоговорящее сообщество
Galeups
Спасибо, я чёт оператор ! первый раз увидел у инпута, обычно только для отрицания использовал. Спасибо буду знать
Ну это обычно и не надо если выключен strictNullChecks
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
Да я не то что бы бест ищу, я просто только вариант с ngSwitch и нашёл, но он не покрывает задачу)
Последний раз я когда админку делал, там для каждой модели по два компонента (list, edit/create) интерфейс и сервис для работы с ним. Тогда я описал в core несколько классов: GenericEditComponent, GenericListComponent, GenericService, после чего в модуле обслуживающем ту или иную модель компоненты наследовал от Generic*. Но всеравно для каждой модели приходилось писать свои компоненты хоть и с минималтным количеством кода.и еще я использовал ngx-formly что позволило не переписывать шаблоны для формы каждый раз
источник

ДМ

Денис Макаров in Angular - русскоговорящее сообщество
Dilame Bowzee
Да я не то что бы бест ищу, я просто только вариант с ngSwitch и нашёл, но он не покрывает задачу)
ngSwitch подходит для очень маленького кол-ва компонентов, потому что вы просто засорите шаблон этими свичами. Посмотрите в сторону динамических компонент и componentFactoryResolver
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
Да я не то что бы бест ищу, я просто только вариант с ngSwitch и нашёл, но он не покрывает задачу)
Универсальные компоненты запилить конечно интересно было бы. Если найдешь красивое решение, поделись!
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Sergei Sergeevich
Универсальные компоненты запилить конечно интересно было бы. Если найдешь красивое решение, поделись!
Ну я думал просто сделать интерфейс
interface Payment {
 subform: new () => any;
 listItem: new () => any;
}

И при реализации нового типа надо этот интерфейс реализовать, но выглядит так себе по-моему)
источник

ДМ

Денис Макаров in Angular - русскоговорящее сообщество
Dilame Bowzee
Да я тоже к этому решению пришёл, через ngSwitch. Но тут ещё такой момент - есть ещё форма создания платежа, которая тоже принимает разные суб-данные в зависимости от типа)
А ещё при клике на компонент платежа надо по-разному обрабатывать
разная обработка при клике - это паттерн команда. Он довольно простой в реализации. Разные типы форм - звучит как динамические формы, которые можно строить по конфигу. Тут как вариант подойдет уже что-то готовое вроде ngx-formly, ну либо под ваши нужды можно что-то свое сделать
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Dilame Bowzee
Ну я думал просто сделать интерфейс
interface Payment {
 subform: new () => any;
 listItem: new () => any;
}

И при реализации нового типа надо этот интерфейс реализовать, но выглядит так себе по-моему)
Нормально выглядит! Конфиг для ngx-formly туда клади. Callback на клик. Интересно, можно ли туда еше запихнуть шаблон для рендеринга?
источник