Essayez de structurer votre service de cette manière :
Service :
@Injectable()
export class MyService {
customerUpdate$: Observable<any>;
private customerUpdateSubject = new Subject<any>();
constructor() {
this.customerUpdate$ = this.customerUpdateSubject.asObservable();
}
updatedCustomer(dataAsParams) {
this.customerUpdateSubject.next(dataAsParams);
}
}
N'oubliez pas d'ajouter MyService
aux fournisseurs.
Lorsque vous mettez à jour votre client (si c'est le cas), vous faites quelque chose comme ceci :
Composant (Celui qui déclenche) :
constructor(private myService: MyService) {
// I'll put this here, it could go anywhere in the component actually
// We make things happen, Client has been updated
// We store client's data in an object
this.updatedClient = this.myObjectWithUpdatedClientData; // Obj or whatever you want to pass as a parameter
this.myService.updatedCustomer(this.updatedClient);
}
Composant (celui qui est souscrit) :
this.myService.customerUpdate$.subscribe((updatedClientData) => {
// Wow! I received the updated client's data
// Do stuff with this data!
}
);
D'après ce que j'ai compris, vous essayez de faire passer des données d'un composant à un autre. Vous récupérez les données de votre client et les envoyez à un autre composant via votre application, n'est-ce pas ? C'est pourquoi j'ai posté cette solution.
Si vous êtes intéressé par d'autres types d'abonnements, lisez ceci :
Observables spéciaux d'Angular 2 (Subject / Behaviour subject / ReplaySubject)
1 votes
Avez-vous essayé un objet vide ? new BehaviorSubject<Object>({}) ;
0 votes
Je reçois une erreur Les paramètres fournis ne correspondent à aucune signature de l'appel cible.
2 votes
Il y a une solution. N'utilisez pas BehaviorSubject si vous n'avez pas besoin de la valeur initiale.
1 votes
Je n'ai pas besoin de la valeur initiale, mais mon service ne fonctionne pas si je n'utilise pas BehaviorSubject.
0 votes
Est-il possible d'utiliser
new BehaviorSubject<Object>({});
à la place ?0 votes
Je ne comprends pas, pourquoi ne pas simplement utiliser new Subject<Object>()
3 votes
@windmaomao car si de nouveaux abonnements sont créés par la suite, ils n'obtiendront jamais cette valeur.
2 votes
@dotbert pas vraiment dans ce cas :-) le but ici est de ne pas déclencher le gestionnaire d'abonnement à moins qu'il y ait une valeur à traiter.