данные с сохранением типа. Если передавать через Input , то проверка типа работает, а если через injector, то уже нет. Скажите, пожалуйста, как передать данные typesafty через инжектор?
А как вы через инпут передаёте? Он же там не работает.
тут пример через инпут https://stackblitz.com/edit/angular-dynamic-components-example-ah4xqi?file=src%2Fapp%2Fapp.component.ts
Через instance? Под этим вы инпут подразумеваете?
а я хочу сделать передачу через конструктор, чтобы компонент можно было в других местах вставлять и провайдить данные
Это не инпут. Это просто свойство Инпут там не работает.
Думаю через обёртку.
можно подробнее?
для меня важна проверка типов, чтобы поддержка проекта сохранялась
Делаете компонент. Он принимает компонент и входящие параметры. Внутри делаете создание динамически. Грубо говоря делаете свой ngComponentOutlet компонент, а на нем уже работает типизация
Также через подобную обёртку и CVA заведутся.
Вот у @thekiba есть интересная стать и библиотека. https://medium.com/thekiba/dynamic-component-rendering-in-angular-with-auto-data-binding-22dd340a4142
а вот так нормально получать зависимость? так выходит type safety constructor(private injector: Injector) { const historyModel = this.injector.get(modelToken); this.model = { header: historyModel.header, oldValue: historyModel.oldValue, newValue: historyModel.newValue + '' }; }
constructor( @Optional() @Inject(token) private data?: modelTokenType ) както так.
вы тип задаете явно. А что если он снаружи поменяется? или вставят что то не то*
так вы же для этого компонент-обертку юзаете или сервис с типизацией. А если захотят через провайдер подменить то тут никак... вероятно
я не про значение я про модель
Типы внутри компонента, создаваемого динамически, вы знаете. Какая разница тип будет выводиться из метода инжектора или устанавливаться на токен.
сделайте historyModel свойством объекта и вам придется указать ему тип
Обсуждают сегодня