Angular 9:销毁子组件后向父组件发送数据。

问题描述 投票:3回答:1

子组件覆盖整个屏幕,所以它有一个在点击按钮后自行销毁的功能(就像进入子组件查看细节,完成后再关闭一样)。

父组件在这个函数中创建了子组件(DetallePedidoComponent),并在这个函数中设置了一个组件工厂。

 createComponent(id) {
        this.entry.clear();
        const factory = this.resolver.resolveComponentFactory(DetallePedidoComponent);
        this.renderer.setStyle(this.pedidoscontainer.element.nativeElement, 'display', 'none');
        this.componentRef = this.entry.createComponent(factory);
        this.componentRef.instance.cPedido(id);
        this.componentRef.instance.componentRef = this.componentRef;
                        }

子组件有一个EventEmitter和一个OnDestroy函数。

 export class DetallePedidoComponent implements OnInit, OnDestroy  {
        @Output() refrescar: EventEmitter<string> = new EventEmitter<string>();
        pedido;
        query: any = {};

        constructor(

            private pedidosService: PedidosService,
            private admService: AdmService,
            private loggedService: LoggedService,
            private dialog: MatDialog,
            private renderer: Renderer2) { }
)

 destroyComponent() {
        this.renderer.setStyle(this.pedidoscontainer.element.nativeElement, 'display', 'flex');
        this.componentRef.destroy();
    }

ngOnDestroy(){ 
         this.refrescar.emit('TEST');   
     }

我从子组件中发出 "TEST"。父组件在一个p表上有 "refrescar "事件(这个表有一个图标,从这篇文章开始就启动了createcomponent函数)。

 <div class="cell">
             <span class="cart" >
            <p-table #dt [value]="pedidos"  [rows]="10" [paginator]="true"
              [pageLinks]="3" [responsive]="true"
              [columns]="cols" 
              [globalFilterFields]="cols" 
              (refrescar) = "log($event)"
                     <mat-icon inline=true class="icon-display"  (click)="createComponent(pedido.Id)"
 matTooltip="Ver">visibility</mat-icon>
                   </span>

                 </td>
                 <td><span >{{ pedido.Nro }}</span></td>
                 <td><span *ngIf="isInRole('CLIENTE') || isInRole('ADM') || isInRole('ADMVENTAS')">{{ pedido.DescripcionDrogueria }}</span></td>
                 <td  ><span> {{  pedido.User.RazonSocial }}</span></td>
                 <td><span>{{ pedido.Estado   }} </span></td>
                 <td><span> {{ pedido.FechaCreacion |  date: 'dd/MM/yyyy hh:mm:ss'}} </span></td>

               </tr>
             </ng-template>
             <ng-template pTemplate="emptymessage" let-columns>
               <tr>
                 <td [attr.colspan]="columns.length+1">
                   No se encontraron registros.
                 </td>
               </tr>
          </ng-template>
            </p-table>
           </span>
           </div>
         </div>

而日志函数看起来是这样的。

Log(m: string){
        console.log (m)     
    }

我的问题是父组件没有对子组件的事件做出反应(日志函数有任何反应)。我是新手,所以我不知道我做错了什么。谁能帮我解决这个问题?

angular typescript components parent-child child-process
1个回答
2
投票

儿女组件覆盖了整个屏幕,所以在点击按钮后有一个自毁的功能(就像进入儿女组件查看详情,然后关闭它一样)。refrescar 事件绑定到 DetallePedidoComponent 组件。如果你使用选择器调用组件,你需要在模板中绑定它,或者在你的情况下你需要订阅它。试试下面的方法

createComponent(id) {
  ...

  this.componentRef.instance.refrescar.subscribe(log => this.log(log));
}
© www.soinside.com 2019 - 2024. All rights reserved.