2016-01-21 35 views
5

Nella mia applicazione ho Home come componente root e un altro componente generico chiamato come lista che sto visualizzando all'interno di Home.Angolare 2: come passare attributi al componente figlio?

Voglio passare i dati come proprietà al mio componente di lista proveniente da XMLHttpRequest.

home.ts

import {Component} from 'angular2/core'; 
import {DashboardService} from '../../services/dashboard'; 
import {List} from '../contact/list'; 

@Component({ 
    selector: 'home', 
    template: 
    ` 
    <h3>Home</h3> 
    <List type="{{type}}"></List> 
    ` 
    providers: [DashboardService], 
    directives: [List], 
}) 
export class Home { 

    private _type: any; 

    constructor(private _dashboardService: DashboardService) { 
    this._dashboardService.typeToDisplay() 
     .subscribe((type) => { 
      this._type = type; 
     }); 
    } 
} 

List.ts

@Component({ 
    selector: 'List', 
    properties: ['type'], 
    template: ` 
     <h2>list</h3> 
    `, 
    providers: [DashboardService] 
}) 
export class List { 

    private type: any; 

    constructor(@Attribute('type') type:string) { 
    this.type = type; 
    console.log(type); 
    } 
} 

che sto ricevendo i dati di stringa da typeToDisplay metodo() la sua una richiesta HTTP & assegnando al tipo di variabile. ma quando ho passato come proprietà per elencare il componente sto diventando nullo nel costruttore di List.

Ho provato anche io ma sto ottenendo "tipo" stringa allo stesso modo.

Spero che la mia domanda sia chiara.

risposta

3

Questa sintassi

<List type="{{type}}"></List> 

è l'impostazione di una struttura non un attributo.
Per impostare utilizzare un attributo sia

<List attr.type="{{type}}"></List> 

o

<List [attr.type]="type"></List> 

Se si vogliono solo avere il valore disponibile in List uso

@Input() type: any; 

anziché l'iniezione attributo.
In questo modo il valore non è ancora disponibile all'interno del costruttore, solo in ngOnInit() o successivo.

+0

** Grazie! Mi mancano i documenti ** –

+1

I documenti sono in corso. Angular è ancora in corso. Scrivere documenti prima che il software sia sviluppato di solito non vola ;-). Controlla anche i code-doc nel codice sorgente. Molte classi hanno una documentazione abbastanza completa e link a esempi in esecuzione in Plunker. –

Problemi correlati