2016-11-17 18 views
-1

Im reduxを使用して、コンポーネントから別のコンポーネントに展開イベントをディスパッチします。reduxを使用して特定のコンポーネントを更新します。

これらのコンポーネントは、テーブル内で使用される:

<table class="table table-bordered"> 
    <thead> 
     <tr> 
     <th *ngFor="let business of businesses"> 
      <app-business-header-cell [business]="business"></app-business-header-cell> 
     </th> 
     </tr> 
    </thead> 
    </table> 

マイヘッダ成分:

export class BusinessHeaderCellComponent implements OnInit { 

    @Input() 
    business: Business; 

    @select() columnState$: Observable<any>; 

    constructor(private ngRedux: NgRedux<IAppState>) { } 

    ngOnInit() { 
    } 

    onClickExpand(){ 
    this.ngRedux.dispatch({ type: 'EXPAND', id: this.business.id }); 
    } 

    onClickCollapse(){ 
    this.ngRedux.dispatch({ type: 'COLLAPSE', id: this.business.id }); 
    } 

} 

ディスパッチ及び状態更新が正常に動作しています。

私の問題は、私のアクションEXPANDをディスパッチすると、他のすべてのヘッダーコンポーネントによって傍受されるということです。どのコンポーネントを更新するべきかを区別する方法はありますか?私が作ってみた

+0

は、私はこの記事を見つけました:http://blog.scottlogic.com/2016/05/19/redux-reducer-arrays .htmlどのようにマルチカウンタに単一のカウンタを使用するから説明しますが、角度2を使用して良い例を見つけることができません。 – Anouar

+0

あなたの状態に応じて分割、それは常に(reduxで作業する前に)あなたのアプリの状態/ redux。 – ajmajmajma

+0

私の状態はとてもシンプルです。問題は、それが汎用コンポーネントによって使用されていることです。私は本当にあなたが "国家を建てる"ということを意味することはできません。 – Anouar

答えて

-1

最も簡単な解決策:いくつかの掘削後

export class BusinessHeaderCellComponent implements OnInit { 

    @Input() 
    business: Business; 

    @select() columnState$: Observable<any>; 

    constructor(private ngRedux: NgRedux<IAppState>) { } 

    ngOnInit() { 
    // ADDED THIS 
    this.columnState$.subscribe(state => { 
     if(this.business.id == state.id) this.isExpanded = state.isExpanded; 
    }); 
    } 

    onClickExpand(){ 
    this.ngRedux.dispatch({ type: 'EXPAND', id: this.business.id }); 
    } 

    onClickCollapse(){ 
    this.ngRedux.dispatch({ type: 'COLLAPSE', id: this.business.id }); 
    } 

} 
関連する問題