J'espère que quelqu'un pourra m'aider
Je souhaite envoyer des données à partir d'une page, puis les utiliser dans une autre page à partir d'un service.
Ceci est le composant parent.ts
XXX
Ceci est mon service
<ion-header> <ion-toolbar> <ion-title>pagina2</ion-title> </ion-toolbar> </ion-header> <ion-content> <h1>Message from Service and Home : {{message}}</h1> </ion-content>
Et enfin, c'est mon dernier composant où je veux obtenir les données de la maison / service p>
import { Component, OnInit } from '@angular/core'; import { ShareService } from '../share.service'; @Component({ selector: 'app-pagina2', templateUrl: './pagina2.page.html', styleUrls: ['./pagina2.page.scss'], }) export class Pagina2Page implements OnInit { message:string; constructor( private shareSvc: ShareService) { } ngOnInit() { this.shareSvc.sharedMessage.subscribe(message => this.message = message) console.log(this.message); } }
Si nécessaire, je publierai ma page2 html:
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class ShareService { private message = new BehaviorSubject<any> (null) ; sharedMessage = this.message.asObservable(); constructor() { } nextMessage(message: string) { this.message.next(message) } }
voici le résultat: entrez la description de l'image ici
3 Réponses :
En fait, vous rencontrez deux problèmes qui vous empêchent de voir l'un de vos messages
newMessage
. C'est pourquoi vous ne recevez pas ce deuxième message. S'il vous plaît, jetez un œil - j'ai créé un petit exemple de démonstration pour que vous puissiez voir de quoi je parle.
P.S. En passant, votre code pourrait être un peu simplifié en utilisant le tube async
et en supprimant la transformation inutile de BehaviorSubject en un simple Observable. Consultez l'exemple ici . < / p>
<❯Mise à jour
Je voudrais quelque chose comme ceci: 112bsimtvcd2kuxvj2ww2jkd-wpengine.netdna-ssl.com/wp-content/... Mais, seulement je veux une communication entre les composants frères ... En utilisant 3 composants (Home.ts, Page2.ts et Service)
Votre solution pourrait alors ressembler à comme suit . Injectez simplement votre service dans tous les composants dont vous avez besoin et utilisez sa méthode pour envoyer des messages et sa propriété de message pour vous abonner aux messages à venir.
J'ai compris mais, dans votre exemple, vous n'utilisez qu'un seul composant, je m'excuse si je ne me suis pas bien expliqué. mon but est de créer une fonction set et une fonction get en service.Dans home.ts, je veux envoyer des données de valeur en utilisant la fonction set, puis dans mon pagina2.ts obtenir les données de valeur du service qui seraient la même valeur extraite de home. ts.
Je ne suis pas sûr d'avoir ce que tu veux. En fait, si vous regardez mon premier exemple - c'est presque du copier-coller du vôtre, et il a deux composants - app.component
et hello.component
. Ce serait formidable si vous fournissiez un exemple minimal reproductible ici afin que je puisse mieux vous aider
Plutôt que de déclarer le behaviorSubject comme privé, vous devez le déclarer public ..
public message = new BehaviorSubject({});
puis, utiliser message.next (valeur);
de n'importe où dans votre application en important le service.
vous pouvez vous abonner à ceci, message.subscribe ()
ou obtenir une valeur unique message.getValue ()
ou en html, utilisez un tube asynchrone
Vous n'avez pas besoin de ce sharedMessage = this.message.asObservable ();
Est-ce que cela répond à votre question? Ionic 3 - Envoi de données au service à partir du composant