2016-11-14 9 views
2

私が派遣されたときに2つのパラメータを必要とするHTTPサービスの呼び出しがあります:どのように私はその後、私の影響でthis.invoiceService.getInvoice()に、これらの2つのパラメータを渡すんAngular 2のngrxエフェクトのパラメータにアクセスする方法は?

@Injectable() 
export class InvoiceService { 
    . . . 

    getInvoice(invoiceNumber: string, zipCode: string): Observable<Invoice> { 
    . . . 
    } 
} 

を?

@Injectable() 
export class InvoiceEffects { 
    @Effect() 
    getInvoice = this.actions 
    .ofType(InvoiceActions.GET_INVOICE) 
    .switchMap(() => this.invoiceService.getInvoice()) // need params here 
    .map(invoice => { 
     return this.invoiceActions.getInvoiceResult(invoice); 
    }) 
} 
+1

おそらく、パラメータを行う必要があり店舗の状態から取得することができます。その場合、答えがあります。[ここ](http://stackoverflow.com/questions/39565811)。 – cartant

+0

私はngrxの新しいブランドですので、私にご負担ください。この場合、私はストアにまだ値を設定していません。私は状態にストアしたいデータを取得するためにサービスコールを行っています。おそらく、私の 'getInvoice()'アクションの 'payload'としてパラメータを渡すべきでしょうか? – Brandon

+0

あなたが店内に情報を持っておらず、代わりに情報がコンポーネントの入力からのソースである場合、例えば、情報をペイロードに入れることが行く方法です。 – cartant

答えて

6

あなたはアクション内のペイロードにアクセスすることができます。

@Injectable() 
export class InvoiceEffects { 
    @Effect() 
    getInvoice = this.actions 
    .ofType(InvoiceActions.GET_INVOICE) 
    .switchMap((action) => this.invoiceService.getInvoice(
     action.payload.invoiceNumber, 
     action.payload.zipCode 
    )) 
    .map(invoice => this.invoiceActions.getInvoiceResult(invoice)) 
} 

それとも、アクションのペイロードをマッピングするためにngrx/effectsからtoPayload機能を使用することができます。

import { Actions, Effect, toPayload } from "@ngrx/effects"; 

@Injectable() 
export class InvoiceEffects { 
    @Effect() 
    getInvoice = this.actions 
    .ofType(InvoiceActions.GET_INVOICE) 
    .map(toPayload) 
    .switchMap((payload) => this.invoiceService.getInvoice(
     payload.invoiceNumber, 
     payload.zipCode 
    )) 
    .map(invoice => this.invoiceActions.getInvoiceResult(invoice)) 
} 
+0

どうにかして私はAPIのドキュメントを見逃してしまった:https://github.com/ngrx/effects/blob/master/docs/api.mdそれはコーディングが遅すぎる。助けてくれてありがとう! – Brandon

関連する問題