2017-03-19 13 views
0

すべてがシンプルなタイプでうまく動作しますが、オブジェクトでそれを処理することはできません。ここでngrx/storeからデータを取得

は私の減速である:

import { Action } from '@ngrx/store' 
import { RssFeed } from "../rss/rss"; 

export interface AppState { 
    demoData: number; 
    feeds: RssFeed[]; 
} 

const initialState: AppState = { 
    demoData: 0, 
    feeds: [] 
}; 

export const INCREMENT = 'INCREMENT'; 
export const DECREMENT = 'DECREMENT'; 

export function feedsReducer(state: AppState = initialState, action: Action): AppState { 

    switch(action.type) { 
    case INCREMENT: { 

     return { 
     demoData: state.demoData + 1, 
     feeds: [] 
     } 
    } 
    case DECREMENT: { 

     return { 
      demoData: state.demoData - 1, 
      feeds: [] 
     } 
     } 
    default: 
     return state; 
    } 
} 

app.module:

import { StoreModule } from '@ngrx/store'; 
import { feedsReducer } from './actions/rss'; 

imports: [ 
    StoreModule.provideStore({ feeds: feedsReducer }) 
    ], 

コンポーネント:

import {Store } from '@ngrx/store'; 
import { AppState, INCREMENT, DECREMENT } from '../actions/rss' 

export class RssComponent { 

    state: Observable<AppState>; 

    constructor(private store: Store<AppState>) { 
    this.state = store.select('feeds'); 

addDemoData() { 
    console.log(this.state); 
    this.store.dispatch({type: INCREMENT}) 
    } 

私はthis.stateのコンソールにあります。

Store {_isScalar: false, _dispatcher: Dispatcher, _reducer: Reducer, source: Store, select: function…} 
012私の州の代わりに

どうして ?

私はここでエラーを考える:

store.select('feeds'); 

を、私は()をstore.selectに渡すのか分かりません。

答えて

2

私はこのようにそれを修正、私はこれは良い方法であることを確認していない:

store.select('feedsReducer').subscribe((data: AppState) => this.state = data); 
1

ここで(文字列を使用するよりもとても良い)タイプをinferingすることのできるシンプルなソリューションです:

は、

-- feeds.component.ts 

this.feeds = store.select(state => state.feeds) 

-- feed.component.html 

<li *ngFor="let feed of feeds | async"> 

参考:あなたは、テンプレートに非同期パイプに使用することができます

store 
    .select(state => state.feeds) 
    .do(feeds => this.feeds = feeds) 
    .subscribe(); 
関連する問題