2017-11-20 2 views
0

Ich versuche, Daten von der übergeordneten Komponente an die untergeordnete Komponente zu emittieren, aber ich habe ein Problem mit meiner ng2-Smart-Tabelle, die im Weg ist ausstrahlend. In meiner Elternkomponente nutze ich die ng2-smart-table, die userRowSelect (eine Standardfunktion) verwendet, wenn ich eine Zeile in der Tabelle auswähle, bekomme ich alle Daten aus dieser Zeile. Die Daten aus dieser Zeile, die ich an meine untergeordnete Komponente übergeben möchte. Ich habe versucht, einen geteilten Service zu nutzen, zu senden und zu senden, keiner von ihnen hat bisher funktioniert. Unten sind Codeschnipsel der zwei Komponenten. Irgendwelche Vorschläge, was zu tun ist?Angular4 Übergabe von Daten von Eltern zu Kind, emittieren funktioniert nicht

Eltern html:

<ng2-smart-table [settings]="settings" [source]="data" (userRowSelect)="onRowSelect($event)"></ng2-smart-table> 

Geordnete Komponente:

@Output() passDataToViewPdf: EventEmitter<any> = new EventEmitter(); 

    ngOnInit() { 
     this.reportService.getReportsTemplates().subscribe(response => this.data = response); 
    } 

    onRowSelect(event): void { 
     this.passDataToViewPdf.next(event); 
     this.router.navigate(['/report-view-pdf', localStorage.getItem('siteId')]); 
    } 

Kinder Komponente:

@Input() template; 

    public handleEvent(event) { 
      // get data from passDataToViewPdf emitter 
     } 
    ngOnInit() { this.template = // get data from handleEvent} 
+1

wird eine Ausgabe zu emittieren, von einem Kind verwendet, ein Ereignis, das von empfangen werden können das Elternteil. Es scheint, dass Sie versuchen, von einem Elternteil ein Ereignis an das Kind zu senden. Das ist einfach nicht so kantig. Eingaben werden zum Übergeben von Daten von Eltern zu Kind verwendet. –

+0

@JBNizet danke für die Klärung! – viddrawings

+0

https://stackoverflow.com/questions/35884451/angular-2-sibling-component-communication und https://stackoverflow.com/questions/31026886/how-do-i-share-data-between-components-in -angular-2 und https://stackoverflow.com/questions/41451375/passing-data-into-router-outlet-child-components-angular-2 – Alex

Antwort

1

Das liegt daran, winkelförmigen Stangen EventEmitter hat emit Methode Wert zu emittieren. Schauen Sie sich docs

Es sollte

sein
this.passDataToViewPdf.emit(event); 

jedoch in Ihrem Code suchen EventEmitter in übergeordnete Komponente definiert ist, so dass Ihre Stammkomponente wird Wert emittiert, um es Eltern nicht auf das Kind.

Es sollte so aussehen.

Kinderkomponente

@Input() template; 
@Input() set pdf(newPdf) { 
    this._pdf = newPdf; 
    this.handleEvent(newPdf); 
}; 
private _pdf; 



public handleEvent(event) { 
    // process your data 
} 
ngOnInit() { this.template = // get data from handleEvent} 

Eltern HTML-Vorlage

<child-component [pdf]="pdfValueInParent"></child-component> 

Geordnete Komponente ts

onRowSelect(event): void { 
     this.pdfValueInParent = event; 
     this.router.navigate(['/report-view-pdf', localStorage.getItem('siteId')]); 
    } 
+0

Ich lade meine Kind-Komponente auf einer anderen Seite, ich route zu dieser Seite über die onRowSelect-Funktion im übergeordneten (/ report-view-pdf). Ich schließe den Child-Component-Selector nicht in das Parent-HTML selbst ein. Wie bekomme ich die Daten immer noch zu meinem Kind, ohne den Selektor in den Eltern-HTML-Code einzuschließen? – viddrawings

+0

Nun, dann können Sie es auf verschiedene Weise tun, vor allem wäre "Service", die Daten speichern und teilen. Wenn es sich um kleine Daten handelt, können Sie 'localStorage' verwenden oder versuchen, es über' router' weiterzugeben. Am schnellsten und sichersten wäre es, die Daten in "service" zu speichern und dann von "service" in "child-component" zu holen. (Mit 'service' meine ich kleinen' angular service' oder du kannst 'singleton' machen) –

+0

Ich habe bereits einen shared service, Routing oder localStorage ist keine Option, da ich viele JSON-Daten weitergeben muss. Ich kann den Shared Service für eine große Datenmenge verwenden. Bisher habe ich ihn nur in meiner App verwendet, um nur einen Wert von Komponente zu Komponente zu übergeben. – viddrawings

Verwandte Themen