По сути, мне нужно создать компонент на основе динамического шаблона и поделиться родительскими данными с вновь созданным компонентом, а также поделиться данными с другими компонентами.
// import
@Component({
selector: 'app-modal',
template: `<div #vcf></div>`,
providers: [AppsService],
encapsulation: ViewEncapsulation.None,
})
export class AppModalComponent implements OnInit, OnDestroy, AfterViewInit {
@ViewChild('vcf', {read: ViewContainerRef}) vcf: ViewContainerRef;
private cmpRef: ComponentRef<any>;
constructor(
private appService: AppsService,
private compiler: Compiler,
private injector: Injector,
private m: NgModuleRef<any>
) {}
ngOnInit() { }
ngAfterViewInit() {
let template;
const styles = [`input { width: 100px }`];
this.appService.getAppTemplate().subscribe((templateData) => {
console.info('dynamic html data ::: ', templateData); // ok
template = templateData;
// Component dynamically.
const templateComponent = Component({template})(class DynamicTemplateComponent {
@Input() sendSMS; // Error, Saying Decorators are not valid here
someMethod() {
alert('some data submitting'); // working
}
addSMSData() {
alert('ok');
}
});
const templateModule = NgModule({
imports: [RouterModule, FormsModule, CommonModule],
declarations: [templateComponent]
})(class {});
this.compiler.compileModuleAndAllComponentsAsync(templateModule)
.then((factories) => {
const f = factories.componentFactories[0];
this.cmpRef = f.create(this.injector, [], null, this.m);
this.cmpRef.instance.name = 'templateFrm';
this.vcf.insert(this.cmpRef.hostView);
});
});
}
}
Вот мой фиктивный шаблон, который тоже рендерится и работает.
<input type = "text" id = "sms_title" [(ngModel)] = "sms_title" name = "sms_title" placeholder = "SMS title" required> <button type = "submit" (click) = "addSMSData()">Submit</button>Итак, как использовать декораторы внутри только что созданного компонента, в котором все работает на лету.
@Input() getSMSData; // Error, Decorators are not valid here
Будет заметна какая-то идея.
Спасибо.
@ uday214125 Как написано в вашем коде, шаблон создается, это рендеринг?
@ShaikNizamuddin да, это рендеринг, поскольку я также использую привязку свойств. См. Мой обновленный запрос.
см. stackoverflow.com/questions/37487977/… и stackoverflow.com/questions/46815473/…
Вы можете создать сервис для обмена данными между вашими компонентами





Есть ли у вас какие-либо документы, подтверждающие, что это реально? Потому что год назад мне понадобилась такая же функция, и тогда это оказалось невозможным из-за отказа от JIT для AOT, который не позволяет создавать динамические шаблоны после начальной сборки.