Angular Как использовать @decorators внутри динамического компонента?

По сути, мне нужно создать компонент на основе динамического шаблона и поделиться родительскими данными с вновь созданным компонентом, а также поделиться данными с другими компонентами.

// 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

Будет заметна какая-то идея.

Спасибо.

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

enf0rcer 07.07.2018 10:02

@ uday214125 Как написано в вашем коде, шаблон создается, это рендеринг?

Shaik Nizamuddin 07.07.2018 10:09

@ShaikNizamuddin да, это рендеринг, поскольку я также использую привязку свойств. См. Мой обновленный запрос.

uday214125 07.07.2018 10:20

Вы можете создать сервис для обмена данными между вашими компонентами

Hikmat G. 07.07.2018 13:20
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
5
1 257
0

Другие вопросы по теме