ребят, возможно в ангуляр отрисовать компонент таким способом?
Та я так и подумал, что нужен компонент что принимает имя компонента, что нужно отрисовать, и по свич кейсу рисует, или можно обойтись без свич кейса?
Допустим ваш кейс подходит, а если дизайн будет требовать много кастомизации?
Вопрос, как динамически вычислять путь к которому цепляется модуль?
А как вызывать функции start и stop дочернего компонента из родительского?
мб кнопки в дочернем и разместить?
У кого нибудь были проблемы с производительностью Jest в проекте?
А вы рендерите все дерево компонентов или мокаете детей?
Безопасно ли писать в Firestore напрямую из фронт-енда?
Поскольку Firebase используется как BaaS, нормально ли, что мы раскрываем бизнес-логику во фронт-енде?
Во-первых, Почему нет?
Ну потому что компонент привязан к разметке, какой толк от компонента в сервисе, если компонента нет в разметке?
Сервису зачем про компонент знать?
Ну может пример есть конкретный?
Пропс прокидывать из коробки через DI и кастомный инжектор:
https://angular.io/api/common/NgComponentOutlet
https://angular.io/api/common/NgComponentOutlet
окей, иду смотртеть, спасибо
Не из коробки — через одну из библиотек:
https://github.com/IndigoSoft/ngxd
https://github.com/Tinkoff/ng-polymorpheus
✨🦊 NgComponentOutlet Data-Binding Full Lifecycle = NgxComponentOutlet for Angular 7, 8, 9, 10, 11, 12, 13 — GitHub — IndigoSoft/ngxd: ✨🦊 NgComponentOutlet Data-Binding Full Lifecycle = Ngx…
В Ангуляр доке есть пример как делать динамические формы, тебе надо создать компонент фабрику типо
factory pattern)
Та я так и подумал, что нужен компонент что принимает имя компонента, что нужно отрисовать, и по свич кейсу рисует, или можно обойтись без свич кейса? Как написали ниже, factory pattern
Это как раз свич кейсом можно, я других вариантов не встречал
Можно через директиву еще
В принципе неплохо, если запариться и сделать свои конфиги. Но нужна версия ангуляра высокая, так как не всё фичи доступны из под 9,например. На одном из проектов столкнулись с тем что материал хинтов нет на 9 версии. Пришлось форкать
Смотря для каких целей
генерировать формы из конфигов)

https://parg.co/UUdY
Допустим ваш кейс подходит, а если дизайн будет требовать много кастомизации? Знаю, что там есть переопределение полей (компонентов), но оно вам надо? Лично мое мнение.
Всем привет, пару дней назад задавал вопрос по таймеру, я там какую-то левую либу использовал, мне посоветовали на rxjs переписать. Я переписал, остался только один вопрос. Таймер — это отдельный дочерний компонент, как сделать его onPush? Пробовал по разному, когда добавляю onPush секунды перестают тикать, даже когда detectChanges вызываю. Ну и если я где-то какую-нибудь дичь написал, буду рад замечаниям, только начинаю разбираться с rxjs 🙂
код на StackBlitz
A angular-cli project based on @angular/animations, @angular/compiler, @angular/core, @angular/common, @angular/platform-browser-dynamic, @angular/forms, @angular/platform-browser, rxjs, tslib, zone.js and @angular/router.
может кто-то делал такую штуку и может подсказать.
Компонент ссылка на пользователя <user-link [user]=»user»>
По умолчанию ведет на роут /users/:userId
Хочу для некоторых роутов переопределить ссылку, например если это /users/tree роут, хочу чтобы при клике переходил в /users/tree/:userId
Модуль с роутом /users/tree может цеплятся может куда-нибудь внутрь, например /dashboard/users/tree, соответственно корень относительно, которого нужно “прыгать” неизвестен.
Пытаюсь добавить provider, в котором читаю ActivatedRoute, и генерю базу для ссылки в соответсвии с ним, если вешаю на компонент — работает, как ожидаются, для модуля нет:
«`
providers: [
provideDefaultOptionsForEntityClassFormFieldLink()
],
«`
«`
export function provideDefaultOptionsForUserFormFieldLink(params?: DefaultOptionsFactoryParams): FactoryProvider {
const defaultParams = { relativePath: ‘./’, linkPrefix: » };
const { relativePath, linkPrefix, linkPostfix, target } = { …defaultParams, …params };
return {
provide: DEFAULT_OPTIONS,
deps: [ActivatedRoute, Router],
useFactory: (activatedRoute: ActivatedRoute, router: Router): DefaultOptions => {
const urlTree = router.createUrlTree([relativePath], { relativeTo: activatedRoute });
const activeRoutePath = router.serializeUrl(urlTree);
return {
linkPrefix: activeRoutePath linkPrefix,
linkPostfix,
target
};
},
}
}
«`
Вопрос, как динамически вычислять путь к которому цепляется модуль? Хочется конфигурить не компонент, а модуль, выглядит красивее 🙂
код на StackBlitz
@ViewChild(TimerComponent) myTimer: TimerComponent = new TimerComponent();
ViewChild это ссылка на уже присутствующий элемент. его не надо инстанциировать
ViewChild это ссылка на уже присутствующий элемент. его не надо инстанциировать
А как вызывать функции start и stop дочернего компонента из родительского?
Я нашел именно такой способ
Я подумал, что будет более универсально, если в компоненте таймера будет минимум всего, то есть только само время, а остальное добавляется по желанию
jest сам по себе не ставит производительность на первое место, как раз по этой причине люди написанные на rust подобные вещи хотят юзать
А вы рендерите все дерево компонентов или мокаете детей?
Хороший поинт, в некоторых местах юзается MockComponent из какой-то либы, но уверен что только в некоторых, проект довольно большой. Спасибо за наводку
Когда рендерятся контейнеры это довольно много ресурсов кушается. Если верить книжке по тесту ангуляра детишек лучше мокать.
Ага, имел ввиду эту либу) спасибо, надо более обильно ее применить
https://testing-angular.com/ тут много разных штук описано
Unit, integration and end-to-end tests for Angular web applications. Free online book and e-book.
Я создаю FinTech-приложение с Firebase как BaaS, и у меня есть следующие вопросы. Буду признателен за любую помощь.
1. Безопасно ли писать в Firestore напрямую из фронт-енда? Я знаю, что могу настроить security rules, ограничивающие пути, по которым каждый пользователь может писать. Но когда пользователь создается после входа в Google, я также хочу создать документ в коллекции users в Firestore, устанавливая начальный баланс пользователя, реферальный код и т. д., поэтому возникает вопрос: безопасно ли записывать такие данные из фронтендf? Пользователи не могут как-то модифицировать скрипты для изменения значения начального баланса?
2. Поскольку Firebase используется как BaaS, нормально ли, что мы раскрываем бизнес-логику во фронт-енде?
Заранее спасибо.
Вообще такие процессы должны происходить на уровне бд и сервисов которые даже не имеют внешнего api. Желательно и использовать какие-то vault сервисы для хранения ключей.
Я создаю FinTech-приложение с Firebase как BaaS, и у меня есть следующие вопросы. Буду признателен за любую помощь.
1. Безопасно ли писать в Firestore напрямую из фронт-енда? Я знаю, что могу настроить security rules, ограничивающие пути, по которым каждый пользователь может писать. Но когда пользователь создается после входа в Google, я также хочу создать документ в коллекции users в Firestore, устанавливая начальный баланс пользователя, реферальный код и т. д., поэтому возникает вопрос: безопасно ли записывать такие данные из фронтендf? Пользователи не могут как-то модифицировать скрипты для изменения значения начального баланса?
2. Поскольку Firebase используется как BaaS, нормально ли, что мы раскрываем бизнес-логику во фронт-енде?
Заранее спасибо.
С фронта делать небезопасно ничего. Делайте всё через бэк
В Angular очень мощный механизм Dependency Injection. Давайте пошагово разберемся, что он из себя представляет, чем полезен и какими возможностями обладает. Посмотрим несколько интересных примеров использования, дадим практические советы и ответим на все ваши вопросы по DI.
Twitter Ромы: https://twitter.com/marsibarsi
Twitter Саши: https://twitter.com/Waterplea
Слайды: https://docs.google.com/presentation/d/1nTgNUlHJOmYq-lbMROWQGkEHq74FV-Uoq86Nqo7QZ0Q/edit?usp=sharing
Полезные ссылки:
Больше выступлений DevFest Russia 2021 на сайте: https://gdg-russia.com/
Канал GDG Russia в Telegram: https://t.me/gdgrussia
Чат GDG Russia в Telegram: https://t.me/gdgrussiachat
Больше о программах Google Developers: https://developers.google.com/community
Присоединяйтесь!
А зачем? Оо
Ну в служебных сервисах в директивах вполне можно, для каких-нибудь конструкций типа таблицы или tree view в тайге, к примеру. Просто надо понимать как работает DI, что там за контейнеры и какова иерархия.
Во-первых, Почему нет? Раньше я полагаю такая возможность была, но сейчас её нет либо не так сильно распространена.
https://youtu.be/wi3wPzReKZQ на 14:20 докладчик это использует для соответствия правилу SRP из SOLID
MoscowJS в Badoo (http://moscowjs.ru/)
«S.O.L.I.D-ый JavaScript», Алексей Охрименко (IPONWEB)
S.O.L.I.D — что значит сочетание этих магических 5 букв? Как автор MVC проектирует свои приложения? Как научиться проектировать свое приложение и не отрастить бороду? Где брать всю эту информацию и что учить? Об этом и многом другом вы узнаете из этого доклада.
http://www.slideshare.net/BadooDev/solid-javascript
А не «правильнее» ли, чтоб компонент при ините (например) как то триггерил сервис, типа «вот он я», а при уничтожении тригеррился, что он уничтожен?
https://youtu.be/wi3wPzReKZQ на 14:20 докладчик это использует для соответствия правилу SRP из SOLID
Ну потому что компонент привязан к разметке, какой толк от компонента в сервисе, если компонента нет в разметке? Да и цикл жизненный его тогда странно выглядеть будет
Чтобы выносить из него бизнес логику
Выносите в сервис. Сервису зачем про компонент знать?
Ну может пример есть конкретный?
Спасибо, как раз интересуюсь, гляну