Как прикрепить [formControl] к типу при его создании в Angular
Я пытаюсь прикрепить [formControl]
(и другие атрибуты верхнего уровня) для объекта, который я создаю с ComponentFactoryResolver
для того, чтобы обрабатывать логику формы с ControlValueAccessor
,
В основном я делаю это:
@Component({selector: 'my-selector', ... })
class ATypeWhichSupportsValueAccessor implements ControlValueAccessor {
@Input()
otherValuableAttribute: boolean = false;
// Implementation of ControlValueAccessor
// ...
//
}
@Component({selector: 'my-dynamic', template: '<ng-template #container></ng-template>', ... })
class CreateDynamic {
constructor(
private vcRef: ViewContainerRef,
private resolver: ComponentFactoryResolver
) {}
@ViewChild('container', { read: ViewContainerRef })
container: ViewContainerRef;
// ...
create() {
let type = ATypeWhichSupportsValueAccessor;
let factory = this.resolver.resolveComponentFactory(type);
let injector = Injector.create([], this.vcRef.parentInjector);
// How to attach top level attributes to my control here?
this._factoryComponent = this.container.createComponent(factory, 0, injector);
}
}
Единственный способ, которым я понял это, это перейти в JIT и использовать RuntimeCompiler, создавая шаблон на лету, как <my-component [formControl]="args" [otherValuableAttribute]="true"></my-component>
, Компилируя это, затем получая экземпляр.
Тем не менее, я не могу запустить это без отключения AOT.
Какой мой лучший вариант здесь?