Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

252
Vistas
Obtener referencia al componente secundario en el componente principal

En Angular 2, tengo un componente que tiene un componente secundario. Sin embargo, quiero adquirir una copia de ese componente secundario para usar en el componente principal, para llamar a sus funciones o lo que sea.

Descubrí que podía usar variables locales y de esa manera podré usar el componente en la plantilla. Sin embargo, no solo lo uso en la plantilla, quiero usarlo en el código real del componente.

Encontré una manera de hacerlo, aquí está el código secundario:

 //our child import {Component, OnInit, EventEmitter} from 'angular2/core' @Component({ selector: 'my-child', providers: [], template: ` <div> <h2>Child</h2> </div> `, directives: [], outputs: ['onInitialized'] }) export class Child implements OnInit{ onInitialized = new EventEmitter<Child>(); constructor() { this.name = 'Angular2' } ngOnInit() { this.onInitialized.emit(this); } }

Padre:

 //our root app component import {Component} from 'angular2/core' import {Child} from './child' @Component({ selector: 'my-app', providers: [], template: ` <div> <h2>Hello {{name}}</h2> <my-child (onInitialized)="func($event)"></my-child> </div> `, directives: [Child] }) export class App { constructor() { this.name = 'Angular2' } func(e) { console.log(e) } }

Lo implementé aquí en este plunker . Pero parece un truco.

¿No hay una forma más sencilla de adjuntar el componente a una variable en su padre?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes usar ViewChild

 <child-tag #varName></child-tag> @ViewChild('varName') someElement; ngAfterViewInit() { someElement... }

donde varName es una variable de plantilla agregada al elemento. Alternativamente, puede consultar por componente o tipo de directiva.

Hay alternativas como ViewChildren , ContentChild , ContentChildren .

@ViewChildren también se puede usar en el constructor.

 constructor(@ViewChildren('var1,var2,var3') childQuery:QueryList)

La ventaja es que el resultado está disponible antes.

Consulte también http://www.bennadel.com/blog/3041-constructor-vs-property-querylist-injection-in-angular-2-beta-8.htm para conocer algunas ventajas/desventajas de usar el constructor o un campo.

Nota: @Query() es el predecesor en desuso de @ContentChildren()

  • https://github.com/angular/angular/blob/2.0.0-beta.17/modules/angular2/src/core/metadata.dart#L146
  • https://github.com/angular/angular/blob/2.0.0-beta.17/modules/angular2/src/core/metadata.dart#L175

Actualizar

Query es actualmente solo una clase base abstracta. No he encontrado si se usa en absoluto https://github.com/angular/angular/blob/2.1.x/modules/@angular/core/src/metadata/di.ts#L145

over 4 years ago · Santiago Trujillo Denunciar

0

Debe aprovechar el decorador @ViewChild para hacer referencia al componente secundario del principal mediante inyección:

 import { Component, ViewChild } from 'angular2/core'; (...) @Component({ selector: 'my-app', template: ` <h1>My First Angular 2 App</h1> <child></child> <button (click)="submit()">Submit</button> `, directives:[App] }) export class AppComponent { @ViewChild(Child) child:Child; (...) someOtherMethod() { this.searchBar.someMethod(); } }

Aquí está el plunkr actualizado: http://plnkr.co/edit/mrVK2j3hJQ04n8vlXLXt?p=preview .

Puede notar que el decorador de parámetros @Query también podría usarse:

 export class AppComponent { constructor(@Query(Child) children:QueryList<Child>) { this.childcmp = children.first(); } (...) }
over 4 years ago · Santiago Trujillo Denunciar

0

En realidad, puede ir con ViewChild API ...

  • Verifique su plunker bifurcado para obtener el código completo - ViewChild API

padre.ts

 <button (click)="clicked()">click</button> export class App { @ViewChild(Child) vc:Child; constructor() { this.name = 'Angular2' } func(e) { console.log(e) } clicked(){ this.vc.getName(); } }

niño.ts

 export class Child implements OnInit{ onInitialized = new EventEmitter<Child>(); ... ... getName() { console.log('called by vc') console.log(this.name); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda