2017-01-27 5 views
0

Hallo, ich habe ein kleines Problem mit der Übergabe von Daten von einer übergeordneten Komponente an einen untergeordneten Komponentencontroller.Übergabe von Daten in Angular2 an untergeordnete Komponente

Das ist der Markup-Code meiner Eltern Komponente parent.component.html

<element [mydata]="Value"></element> 

Damit ich mydata mit einem Wert gesetzt.

ich diesen Wert mit @Input in meinem Kind Controller

import { Component, OnInit, Input } from '@angular/core'; 

@Component({ 
    selector: 'element', 
    templateUrl: './element.component.html', 
    styleUrls: ['./element.component.scss'], 
}) 

export class ElementComponent implements OnInit { 

    @Input() public mydata:string; 

    ngOnInit() { 
     console.log(this.mydata); 
    } 
} 

ich eine undefinierte in der Konsole, aber warum?

+0

wird 'Value' von Ajax aufgefüllt? –

+0

Nein, das funktioniert für mich ' {{value}}' aber wie kann ich diese Variable im Konstruktor verwenden? – greenchapter

+0

warum Sie wollen, Wert innerhalb Konstruktor .. Sie sollten Lifecycle Event verwenden ... –

Antwort

1

Sie können @Input Daten im Konstruktor nicht zugreifen (es noch nicht initialisiert ist), müssen Sie OnInit Schnittstelle implementieren:

import { OnInit } from "@angular/core"; 

export class My implements OnInit { 
    ... 

    ngOnInit() { 
     console.log(this.mydata); 
    } 

} 
+0

Ja, ich habe das auch getan 'importieren {Komponente, OnInit, Input} von '@ angular/core';' Aber angular sagt ** Eigenschaft 'mydata' existiert nicht ' – greenchapter

+0

[Hier] (https: // scotch.io/tutorials/3-ways-to-pass-async-data-to-angular-2-child-components) wird helfen, das Problem zu verstehen –

3

Wahrscheinlich ein Asynchron-Problem, wie es scheint, Sie werden immer die Daten von json, was wahrscheinlich über http oder etwas abgerufen wird. Der undefinierte Fehler wird wahrscheinlich dadurch verursacht, dass die Ansicht gerendert wird, bevor die Daten tatsächlich abgerufen wurden, was zu einem nicht definierten Fehler führen würde.

Versuchen Sie, einen Zustand zu setzen, dass das Kind Komponente nicht wiedergegeben werden, bis es tatsächlich einen Wert hat:

<element *ngIf="value" [mydata]="value"></element> 

Und das aktuelle Setup halten, die Sie von anderer Antwort vorgeschlagen worden, das heißt:

import { Component, OnInit, Input } from '@angular/core'; 

@Component({ 
    selector: 'element', 
    templateUrl: './element.component.html', 
    styleUrls: ['./element.component.scss'], 
}) 


export class ElementComponent implements OnInit { 

@Input() public mydata:string; 

    ngOnInit() { 
    console.log(this.mydata); 
    } 
} 

Hoffe, das hilft!

Verwandte Themen