Angular 为什么我不能在组件内指定和使用值?
我有一个服务在组件之间共享变量,如下所示Angular 为什么我不能在组件内指定和使用值?,angular,typescript,components,Angular,Typescript,Components,我有一个服务在组件之间共享变量,如下所示 import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; @Injectable() export class AppMessageQueuService { checkOutPageParams: Subject<Object>; constructor() { this.chec
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class AppMessageQueuService {
checkOutPageParams: Subject<Object>;
constructor() {
this.checkOutPageParams = new Subject<string>();
}
}
我可以在调试时看到分配给事件的值,这就是我如何获得第二个组件中的值
this.appMsgService.checkOutPageParams.next({
'userId': listItem.userInfo.userId,
'listingId': listItem.listingId,
'event': this.event
});
this.appMsgService.checkOutPageParams.asObservable()
.switchMap((params: Object) => {
let userId = params['userId'];
let listingId = params['listingId'];
this.event = params['event'];
return this.checkOutInforService.getCheckoutDetails(userId, listingId);
}).subscribe((checkoutDetail: CheckoutUserDetail) => {
this.checkoutInfoDetails = checkoutDetail;
});
console.log(this.event) //this returns undefined
我也可以看到分配给事件的值。但是当我在上面几行之后打印一个console.log(this.event)时,它会显示undefined
问题是什么。如何将值分配给事件并在组件2中使用它。我不确定这是否是最好的方法,但您可以尝试:
import 'rxjs/add/observable/forkJoin'
this.appMsgService.checkOutPageParams.asObservable()
.switchMap((params: Object) => {
return Observable.forkJoin ([
this.checkOutInforService.getCheckoutDetails(userId, listingId),
Observable.of(params)])
}).subscribe((result) => {
this.checkoutInfoDetails = result[0] as CheckoutUserDetail;
this.params = result[1];
... do with params as you wish ...
});
不,你不能。可观察对象是异步的,因此console.log在分配this.event之前执行。将语句移动到
subscribe
块内。如何使用该值,然后在subscribe块内使用该值。@pixelbits表示参数未定义发生错误时,您在哪里尝试使用params
,但是当我在ui中绑定时,我看不到数据,知道吗 {{event}}我能否直接将这些变量绑定到ui元素?