2017-05-12 16 views
0

現在、@ngrx状態管理パッケージを既存のAngular2アプリケーションに組み込む途中です。これまでのところすべてがうまくいっていますが、前のコンポーネントに戻り、アプリケーションストア経由で状態を維持するときに、[ngClass]ディレクティブが正しく機能しないという問題が発生しています。コンポーネントビューngClassが更新されない

私が実装しようとしている機能は、ユーザがカテゴリをクリックしたときに、そのコンポーネントのリンクが 'selectedCategory'という@ngrxストアで更新されたコンポーネントクラスのプロパティを使用して、 。ユーザーが個々の製品をクリックすると、別の製品コンポーネントに移動します。次に、ユーザーが元のコンポーネントに戻ると、 'selectedCategory'が@ngrxストアに格納されているため、リンクに 'active'というクラスを再度与える必要があります。これはうまくいかず、私の[ngClass]ディレクティブがうまく動かないようです。

ここに私のコードがあります(これはすべてリファクタリングされていますので、私たちは話が奇妙に思えるかもしれません)。

カテゴリツリーコンポーネント

@Component({ 
    selector: 'category-tree', 
    templateUrl: './app/views/directives/category-tree-view.html' 
}) 

export class CategoryTree { 
    @Input() categories: Category[]; 
    @Output() categoryChange:EventEmitter<any>; 
    contentLoaded = false; 
    selectedCategory: Category; 
    categoriesLower = []; 
    APIError = []; 

    constructor(
     private _categoryService: CategoryService, 
     private _store: Store<ProductViewerStore> 
    ) { 
     this.categoryChange = new EventEmitter(); 

     _store.select('selectedCategory') 
      .subscribe((selectedCategory) => { 
       this.selectedCategory = selectedCategory; 
      }); 
    } 

    categoryClick(category) { 
     this._store.dispatch({ type: 'MAKE_CATEGORY_SELECTED', payload: category }); 
     this.getCategoriesLower(category); 
    } 

そして、それはビューです:

<li *ngFor="let category of categories" class='desktop-menu'> 
    <span (click)="categoryClick(category)" [ngClass]="{'selected' : category === selectedCategory}">{{category.name}}</span> 
    <ul *ngIf="category.sub_categories" class='sub-category'> 
     <category-tree [categories]="category.sub_categories"></category-tree> 
    </ul> 
</li> 

そしてselectedCategory @ngrx減速:あなたは私のコンポーネントのコードで見ることができるように

import {Category} from "../../classes/Category"; 

export const selectedCategory = (state: Category, action) => { 
    switch(action.type) { 
     case 'MAKE_CATEGORY_SELECTED': 
      return action.payload; 
     case 'RESET_SELECTED_CATEGORY': 
      return {}; 
     default: 
      return state; 
    } 
}; 

、 selectedCategoryコンポーネントが保存されており、サブスクリプションで正しく返されています。このObservableが返されて解決されたときに、ビューテンプレートngClassが実行されていません。誰もがここで問題を見ることができますか?

おかげ

+0

非常に興味深い問題です。あなたはプランカを作成できますか? – CharanRoot

答えて

0

selectedCatagoryObjectある場合は、参照チェックを行い、おそらくあなたの===は、正しく解決されていませんか?それはのようになります。は大丈夫ですが、おそらくngrxに関して何かが起こっていますか?

関連する問題