2017-03-02 60 views
1

我有被分配的值的服务共享组件之间的变量如下,为什么我不能分配和使用组件内的值?

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)时,它说undefiend。

问题是什么。我怎么能值分配给事件和组件2

+1

你就是不行。 Observable是异步的,因此console.log在分配this.event之前执行。在'subscribe'块中移动语句。 – pixelbits

+0

如何使用该值然后 – Sajeetharan

+1

使用您的订阅块内的值。 – pixelbits

回答

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 ... 
      }); 
+0

Observable.forkJoin不是函数 – Sajeetharan

+0

您必须导入运算符 – pixelbits

+0

它的工作原理,但是当我在ui中绑定时我看不到数据,有什么想法?

{{event}}

Sajeetharan

相关问题