2016-04-21 13 views
2

I verschachtelt sind vorbeiAngular 2: Kind-Objekt mit verschachtelten Objekt Komponentenobjekt

data: { 
    nestedData: { 
    title: 'string' 
    } 
}; 

ich diese Daten an untergeordnete Komponente

über Eigenschaft übergeben
<child-component [data]="data"></child-component> 

Kinderkomponentencode:

import {Component, Input} from 'angular2/core'; 

@Component({ 
    selector: 'cp-header', 
    template: '<div>{{ data.nestedData.nestedData }}</div>', 
    styleUrls: ['app/header/header.component.css'] 
}) 
export class ChildComponent { 
    @Input() data; 
} 

Wenn ich dann versuche, auf Objekteigenschaft in Vorlage zuzugreifen, habe ich einen Fehler bekommen;

+0

ist "kind-compoennt" in Ihrem Aufschlag nur ein Tippfehler hier? und wie sieht deine 'Component' Definition aus? – james

+0

@james Nur Selektor, templateUrl & styleUrls Eigenschaften – neilhem

+0

Wie und wo greifen Sie auf das Kind zu? –

Antwort

3

Versuchen Sie es mit elvis Operator in Ihrem HTML: data?.nestedData?.title.

Sie sollten auch @Input data zu @Input() data ändern.

+0

Ich habe die Ansicht im Komponenten-Decorator hinzugefügt. – neilhem

+0

Richtig, mein Schlechter, meine Augen haben es als URL geparst. Hat elvis operator irgendeine Hilfe gebraucht? – Celebes

+0

Mein Fehler, ich habe Tippfehler in @Input() behoben. Wenn ich also auf Daten in der Vorlage zugreife {{data | json}} Es gibt keinen Fehler. Aber wenn ich so schreibe {{data.nestedData}}, habe ich den Fehler 'EXCEPTION: TypeError: Kann die Eigenschaft 'nestedData' von undefined in [{{data.nestedData? .title}} nicht lesen. Elvis-Operator hilft nicht. – neilhem

0

Sie können nicht auf Eingaben im Konstruktor zugreifen. Sie werden nur gesetzt, bevor ngOnInit aufgerufen:

export class ChildComponent { 
    @Input data; 

    constructor() { 
    console.log(this.data); // here it prints `null` 
    } 

    ngOnInit() { 
    console.log(this.data); // here it prints the actual value 
    } 
} 
+0

Ich versuche nicht, auf Eingabedaten im Konstruktor zuzugreifen, ich versuche in der Ansicht darauf zuzugreifen – neilhem

+1

Das ist schön zu wissen, aber Sie zeigen immer noch nicht wie. Dann müssen Sie wahrscheinlich den Safe-Navigation-Operator verwenden. '{{data? .nestedData? .title}}' oder '=" data? .nestedData? .title "' –