0
votes

Passer observable à un autre composant en angulaire

J'ai deux composants Détails code> et Détails-View CODE>.

Dans les détails Détails CODE> Je dois passer observer par @ Entrée () code> dans le composant secondaire. P>

Détails Composant P>

@Input()
resouces$: Observable<DetailsResponse[]>


2 commentaires

En supposant que ce n'est pas une faute de frappe: this.res $ = Service.getData ne fait que passer la définition de la fonction. Si vous voulez réellement un observable, vous devez exécuter la fonction this.res $ = service.getdata () . Sinon, si vous voulez passer la définition de la fonction, votre typage de ressource $ est incorrect, et il doit être (ID: numéro, type: String) => Observable correspondant à res $ à partir du composant parent


Comme Vlad a dit que vous passez une fonction au lieu d'observable. Dans votre cas, vous devez appeler cette fonction de ressources $ () pour obtenir l'observable de l'extérieur. ressources $ (). S'abonner.


3 Réponses :


0
votes

Vous pouvez modifier le DétailsViewComponent code> comme le code suivant

export class DetailsViewComponent implements OnInit, OnChanges {

  @Input() resouces$: (id: number, type: string) => Observable<DetailsResponse[]>;

  constructor(
  ) {}

  ngOnInit() {
  }

  ngOnChanges(data) {
    if (data.resouces$ && this.resouces$) {
      this.resouces$(this.id, this.type).subscibe(res => {});
    }
  }

}


3 commentaires

Arguments pour getdata () est connu dans le deuxième composant afin qu'il ne fonctionne pas


Est id et type défini lorsque les DétailsViewComponent ont été créés?


Oui ,



2
votes

Outre la typographie au service.getdata () , il est également important de savoir quand les propriétés d'entrée sont disponibles pour être liées. Les entrées ne sont pas définies dans le constructeur, elles sont disponibles dans le crochet Ngonchanges à chaque fois qu'une entrée change. ou dans ngoninit si vous voulez lier juste la première fois qu'il est reçu.

https://angular.io/guide/lifecycle-hooks


0 commentaires

1
votes

La dactylographie ne correspond pas. res $ est une fonction (ID: numéro, type: chaîne) => Observable , mais resouve $ est un observable Observable ;

En fonction de vos commentaires, vous devez passer une fonction car les arguments ne sont pas disponibles dans le composant parent. Donc, vous devez accepter une fonction comme @input , puis l'exécuter dans le composant enfant.

composant enfant xxx


0 commentaires