J'ai deux composants non liés CartComponent et CheckoutComponent. J'aimerais transmettre des données de CartComponent à la caisseComponce. À cette fin, j'ai créé un service partagé.
export class CheckoutComponent implements OnInit {
checkoutProducts: Products[];
constructor(private formBuilder: FormBuilder, private cartService: CartService) { }
ngOnInit() {
this.cartService.getData().subscribe( data => {
this.checkoutProducts = data;
console.log(this.checkoutProducts);
});
}
}
3 Réponses :
Vous devez vous assurer que les deux composants utilisent la même instance du service. Où est fourni le service? Si les deux composants sont dans le même module, fournissez le service dans ce module. S'ils sont dans différents modules, fournissez uniquement le service dans un module qui importe les deux modules de composants. ( Aussi, avec plus de 6 versions de angulaires, vous pouvez définir les modules fournis directement au service. Retirez le service de tous les modules où il est fourni et essayez: p> ceci doit avoir le même résultat que pour fournir le service uniquement dans le Appmodule code> est généralement un choix sûr.) Appmodule code> . p> p>
Dans Appmodule j'ai ajouté ce service de service aux fournisseurs de tableau
Je dois supposer que votre getCartProducts est un appel ASYNC - vous devez obtenir ou renvoyer une observable, vous avez donc besoin d'envoyer des valeurs dans la souscription
getCart() {
this.cartService.getCartProducts().subscribe(res=>{
this.cartProducts =res;
this.cartService.setData(this.cartProducts);
});
}
Ceci est parce que vous utilisez un sujet Je recommanderais d'utiliser Lorsqu'un nouvel abonnement est effectué (via le code>. Un nouveau abonné à un sujet code> code> ne recevra rien qui a été émis précédemment, sauf s'il s'agit d'un ReplaySubject code> ou un comportement (code> comportement p>. P>.
replaysubject code> avec une longueur tampon de 1: p>
Cartsubjectlist privé = Nouveau ReplaySubject CheckoutComponent code>), il devrait immédiatement recevoir l'émission précédente. P>
Vous avez probablement deux instances de votre service (un avec les données et un vide). Mettre un
console.log code> dans le constructeur de votre service et regardez combien de fois vous les invoquezComment
fournit-vous code> votre service?@ Aw3Same zapodaj.net/2869137968d0b.png.html