2017-05-12 4 views
2

Pourquoi obtenir une valeur non définie de camion, lorsque j'envoie des données de TransportComponent, à TruckComponent?Angular 2 Envoyer des données à un enfant

export class TransportComponent { 
actualTransport: Subject<any> = new Subject(); 

this.serviceTransport.subscribe((data) => { 
      data.transports.forEach(transport => { 
       this._truckService.getTruck(transport.idTransport) 
       .subscribe((truck) => { 
        data.truck = truck ///Here I add to data field truck 
       }); 
      }); 
      this.actualCourse.next(truck); 
     }); 
} 

C'est modèle de TransportComponent:

<tabset > 
    <tab heading="Trucks"> 
    <truck [actualTransport]="actualTransport"></general> 
    </tab> 
    <tab heading="Bus"> 
    <bus [actualTransport]="actualTransport"></general> 
    </tab> 
</tabset> 

TruckComponent ressemble à ça:

export class TruckComponent { 

    @Input() actualTransport: Subject<any>; 

    ngOnInit() { 
    this.actualCourse.subscribe(
    (data) => { 
     console.log(data) // in browser console truck value, is 
     present 
     console.log(data.truck) // here is undefined 
     } 
    } 
    } 

Dans la console du navigateur, la valeur de camion est non défini, mais dans les données de l'objet, il a tout peuplé champ .

+1

Y a-t-il une raison pour laquelle vous utilisez un sujet ici, et pas seulement '@ Input' avec une variable? – Alex

+0

@ AJT_82 Non, je me demande simplement pourquoi cela se produit. – Dan

+0

Ok, alors je vous suggère d'utiliser simplement des variables au lieu de Subject :) – Alex

Répondre

0

Je crois que le problème réside dans le fait que vous utilisez le hook de cycle de vie OnInit dans TruckComponent et puisqu'il s'agit d'un composant enfant, ngOninit() est déclenché lorsque son composant parent TransportComponent s'initialise. Je vous suggère de déplacer ngOninit() vers votre composant parent et d'utiliser la méthode actualCourse.subscribe de TruckComponent dans un constructeur. J'espère que ça aide!