我创建了一个API服务,它从Stripe返回一个transactionID。我想将该事务ID从兄弟组件“Payment”传递给兄弟组件“Invoice”。 Invoice-component有一个下载链接,需要transactionID。我对RxJS lib相当新,但我认为我得到了BehaviorSubject的重点。
预期的行为是什么:
当我输入payment-component和buy and item时,StripeAPI返回一个transactionID。路由器导航到/ invoice组件,来自payment-component的上述TransactionID应作为Observable(或任何类型的变量)传递给该组件。
结果:
我使用BehaviorSubject和一个从中返回值的函数设置服务。当我在我的支付组件中调用并订阅该功能时,它工作正常。当我在兄弟组件中执行此操作时,它将返回默认值(0)。
代码:
服务:
private transId = new BehaviorSubject<any>(0);
cast = this.transId.asObservable();
sendTransId(transId: any) {
this.transId.next(transId);
}
付款部分:
ngOnInit() {
this.paymentSrv.cast
.subscribe(data => {
this.transId = data);
console.log(this.transId);
}
}
pay(item) {
this.paymentSrv.buyStory(storyId)
.subscribe(payment => {
console.log(payment.Transaction.id);
const transactionID = payment.Transaction.id;
this.paymentSrv.sendTransId(transactionID);
}
})
}
发票组件(兄弟):
ngOnInit() {
this.paymentSrv.cast
.subscribe(data => this.transId = data);
}
这是应该使用transID调用的函数:
seeInvoice(transactionID) {
window.location.replace(`test-platform/invoice/${transactionID}`);
}