2017-06-22 12 views
4
private customer: Subject<Object> = new BehaviorSubject<Object>(null); 

setCustomer(id, accountClassCode) { 
    this.customer.next({'id': id, 'accountClassCode': accountClassCode}); 
} 

getCustomer() { 
    return this.customer.asObservable(); 
} 

私はこのコード部分を使用していますが、nullのIDを見つけることができないエラーが発生しています。 nullでない初期値を得るための解決法はありますか?動作主体初期値null?

+1

それはそうすべきですか?新しいBehaviorSubject ({}); –

+0

im gettin a error指定されたパラメータが呼び出しターゲットのシグネチャと一致しません。 – None

+1

解決策があります。初期値が必要ない場合は、BehaviorSubjectを使用しないでください。 – estus

答えて

13

BehaviorSubjectの目的は、初期値を提供することです。それはnullまたは何でもよい。有効な初期値を指定できない場合(ユーザーIDが未知の場合)は、使用しないでください。

ReplaySubject(1)は、同様の動作(サブスクリプションでは最後の値を出力)を提供しますが、nextで設定するまでは初期値はありません。あなたは空のオブジェクトを試みるました

private customer: Subject<Object> = new ReplaySubject<Object>(1); 
1

てみ構築あなたのサービスこうして:

サービス:

@Injectable() 
export class MyService { 
    customerUpdate$: Observable<any>; 

    private customerUpdateSubject = new Subject<any>(); 

    constructor() { 
     this.customerUpdate$ = this.customerUpdateSubject.asObservable(); 
    } 

    updatedCustomer(dataAsParams) { 
     this.customerUpdateSubject.next(dataAsParams); 
    } 
} 

は、プロバイダにMyServiceを追加することを忘れないでください。

(これが事実であるならば)、あなたのクライアントをアップデート

、あなたはこのような何か:

コンポーネント(トリガ1):

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); 
    } 

コンポーネント(1を購読は)です:私はあなたがデータを渡すためにしようとしている、理解し何から

this.myService.customerUpdate$.subscribe((updatedClientData) => { 
      // Wow! I received the updated client's data 
      // Do stuff with this data! 
     } 
    ); 

1つのコンポーネントから別のコンポーネントへお客様のクライアントのデータを取得し、アプリケーションを介して別のコンポーネントに送信します。だから私はこのソリューションを投稿したのです。

サブスクリプションの他のタイプに興味があるなら

、これを読んで:

Angular 2 special Observables (Subject/Behaviour subject/ReplaySubject)

関連する問題