0
votes

Passage observable au composant fromage dans RxJS

J'essaie de transmettre un objet JavaScript comme un élément observable à un composant fromage. Pour ce faire, j'ai créé un service pass.service.ts qui contient une déclaration de variable comme suit:

PublicsedData: tout xxx

Ce faisant, je peux vous abonner à l'observable dans mon autre composant. Je récupère les données dans l'autre composant à l'aide de: xxx

Je ne reçois aucune nouvelle mise à jour, une fois que DATA change cependant.

Le comportement est le même que si je vous abonner à l'aide de observable.first ()

Qu'est-ce que je manque?


6 commentaires

Que voulez-vous dire "une fois que les données observées changent" ? S'il vous plaît donner un exemple de reproductible minimal .


Veuillez consulter le code mis à jour.


L'autre composant est souscrit à un objet totalement différent , puis.


J'ai fait une autre modification. Je suis conscient que c'est un autre objet. Ceci est nécessaire dans mon exemple. Je suis abonné à un observable et en utilisant les données observées pour en créer un autre. Pourquoi cela ne fonctionne-t-il pas?


Vous créez un observable avec de (données) et ne jamais émettre à nouveau de celui observable. Ceci est attendu. Si vous faites SEATR = [1, 2]; const obs = de (r) , puis arr.push (3) , abonnés à obs ne recevra pas le 3ème élément.


Si vous savez que, alors ce n'est pas clair, pourquoi pensez-vous travaillerait, utilisez un sujet à la place.


3 Réponses :


1
votes

Utiliser le sujet a plus de sens, ou peut-être injecter cela.fb à votre service si vous utilisez une injection de dépendance xxx


0 commentaires

1
votes

Vous devez utiliser un Sujet (les sujets sont également observables). Importer {Sujet} de 'RxJS'; CODE>

SERVICE STRORT> P>

Créer un sujet dans votre service. Ce sujet sera utilisé par vos composants pour partager des données. P> xxx pré>

composant 1 strong> p>

passe de nouvelles données sur le sujet par appeler suivant code>. p> xxx pré>

pour passer tous les événements, y compris erreur code> et compléter code> Events d'un Observable à un sujet que vous pourriez faire: this.fb.user $ .subscribe (cela.Passservice.PassedData); code> Mais cela signifiera this.passservice.PassedData ​​code> juste miroirs this.fb.user $ code> et vous pouvez simplement utiliser this.fb.user $ code> code> directement à la place. P>

Composant 2 strong> p>

est averti sur les nouvelles données du sujet en vous abonnant. p>

this.passService.passedData.subscribe(data => this.data = data);


0 commentaires

1
votes

Vous pouvez simplement définir la propriété dans votre service comme ceci: xxx pré>

alors vous pourriez y souscrire dans n'importe quel composant qui en a besoin. p>

mais il regarde réellement Comme si vous avez déjà un autre service (fb?) qui a une propriété US $? Si tel est le cas, vous pouvez vous abonner à la propriété utilisateur $ dans chaque composant qui en a besoin. P>

Vous pouvez également le conduire via un Sarreurplay (1) code> pour partager le résultat avec tous les abonnés : P>

user$ = this.fb.user$.pipe(shareReplay(1));


0 commentaires