Búsqueda de sitios web

typescript - @Output desde un Componente creado dinámicamente en Angular 6


En mi proyecto de Angular 6, tengo un componente creado dinámicamente como el siguiente:

@Component({
    selector: 'app-staff-dash',
    template: `
    <template #tasksContainer></template>
`
})

export class StaffDashComponent implements OnInit {

    componentRef: any;
    factory: any;
    @ViewChild('tasksContainer', { read: ViewContainerRef }) tasksEntry: ViewContainerRef;


    constructor(
        @Inject(ComponentFactoryResolver) private resolver: ComponentFactoryResolver
    ) {

    }

    ngOnInit() {
        this.createTasksComponent();
    }


    createTasksComponent(): void {
        this.tasksEntry.clear();
        this.factory = this.resolver.resolveComponentFactory(TasksComponent);
        this.componentRef = this.tasksEntry.createComponent(this.factory);
    }
}

StaffDashComponent es el componente padre y TasksComponent es el componente hijo. Ahora quiero que algunos datos se pasen desde TasksComponent hacia StaffDashComponent usando @Output. ¿Cómo puedo lograr eso?

Respuesta #1

Para un componente hijo creado dinámicamente, tienes que suscribirte al evento de salida dentro del componente padre.

padre.comp

createTasksComponent(): void {
        this.tasksEntry.clear();
        this.factory = this.resolver.resolveComponentFactory(TasksComponent);
        this.componentRef = this.tasksEntry.createComponent(this.factory);
        //subscribe to child output event
        this.componentRef.instance.outputEvent.subscribe(val => console.log(val));
}

compañía infantil

@Output() outputEvent : EventEmitter<boolean> = new EventEmitter<boolean>(); 
someFunc() {
      this.outputEvent.emit(true)
}

Artículos relacionados