2017-01-19 1 views
3

解決しにくい簡単な問題があります。 sorting.changespagination.changesの2つの値のいずれかが変更されていないと、発火しません。私はdistinctUntilChangedが使用されるべきだと推測していますが、1つではなく2つの値をチェックする必要があるので、引数として何を提供するのか分かりません。角度2マップから返された2つの値のいずれかが変更されていない限り、サブスクリプションが放火されないようにする方法

EDIT(正確には、この時間を呼び出すサブスクライブ):ここに呼んで購読です:オブジェクトの

this.requestParamsSubscription = this.store.select('brands') 
    .distinctUntilChanged() 
    .map((brands: IBrandsStorage) => { 
    return {sorting: brands.sorting, pagination: brands.pagination}; 
    }) 
    .subscribe(
    params => { 
     this.store.dispatch({type: BrandsActions.GET_BRANDS_REQUEST}); 
    } 
); 

changesは、変更を追跡し、単純な数値のカウンターで、私はこれを使用することができます考え出し前回以降にオブジェクトが変更されているかどうかを確認します。

アイデアはありますか?

+0

をタイトルに変更が質問テキストと一致していない:「二つの値がない限り、すべてと合計が変更されました」。私は答えを変えても構いませんが、 "すべての*値や*合計値が変更されていない限り"、質問も変更する必要があります。 – cartant

+0

編集して明快にしました。 – Chrillewoodz

答えて

2

distinctUntilChangedは、比較関数(引数が変更されていない場合はtrueを返す必要があります)を渡すことができます。 allまたはtotalのいずれかが変更されているしている場合は、あなたが使用することができます。

this.brandsStorageSubscription = this.store.select('brands') 
    .map((brands: IBrandsStorage) => ({ all: brands.all, total: brands.total })) 
    .distinctUntilChanged((a, b) => (a.all === b.all) && (a.total === b.total)) 
    .subscribe(
    brands => { 
     console.log(brands); 
     this.total = brands.total; 
     this.brands = brands.all; 
    } 
); 
+0

うーん、実行されていないようです。私は誤ってサブスクライブ呼び出しを間違って投稿しましたが、私の他のものでは、 'all'と' total'は両方ともいくつかのプロパティを含むオブジェクトと、これらのプロパティの1つとして別のオブジェクトです。深いオブジェクトの場合は '==='と比較することはまだできますか? – Chrillewoodz

+0

いいえ変更がないとみなす場合は、 'true'を返す実装を提供する必要があります。それはあなた次第です。 – cartant

+0

さて、私はそれを試してみましょう。 – Chrillewoodz

関連する問題