Селекторы не получают никакого состояния в угловых (ngrx) - PullRequest
0 голосов
/ 26 декабря 2018

Здравствуйте, когда я инициализирую свое приложение и запускаю его, я не получаю никакого состояния в моих селекторах.В любом случае я установил начальное состояние по умолчанию и передаю его своему редуктору, потому что они являются первыми, которые подписываются на хранилище, когда приложение является init, и они предоставляют начальное состояние, но мой селектор не получает никакого состояния.Также я подключил свое состояние к своему редуктору с помощью StoreModule.forFeature(GlobalState.stateName, globalReducer), я даже использую ngrx devtools, но для отслеживания состояния, но исходное состояние остается пустым, у меня действительно заканчиваются идеи, почему такое поведение

Я пыталсяdevtools для отслеживания моего состояния, я пытался отладить мой селектор и проверять при получении новых значений, но этого не происходит.

Действие:

import { Action } from '@ngrx/store';
import { HttpErrorResponse } from '@angular/common/http';

export const GlobalActionTypes = {
  HandleError: '[HttpResponseError] This will handle errors from serivces',
  LoadingScreen: '[Loading] This will show loading screen'
}

export class HandleErrorAction implements Action {
  readonly type: string = GlobalActionTypes.HandleError;
  constructor(public payload: HttpErrorResponse) { }
}

export class LoadingScreenAction implements Action {
  readonly type: string = GlobalActionTypes.LoadingScreen;
  constructor(public payload: boolean) { }
}

Редуктор:

import { Action } from '@ngrx/store';
import { GlobalActionTypes, LoadingScreenAction } from 
'../actions/global.actions';
import { GlobalState } from '../state/global.state';
import { ActionsMap } from 'src/app/core/models/reducer.model';

const initialState: GlobalState = {
  isLoading: false,
}

function loadingScreen(
  state: GlobalState,
  action: LoadingScreenAction): GlobalState {
    const newState = Object.assign({}, state);
    newState.isLoading = action.payload;
    return newState;
}

export const mapToReducer: ActionsMap<GlobalState> = {
  [GlobalActionTypes.LoadingScreen]: loadingScreen
}

export function globalReducer
  (state: GlobalState = initialState, action: Action) {

  mapToReducer[action.type] ? mapToReducer[action.type](state, action) : state
}

Состояние:

export class GlobalState {
  static stateName: string = 'Global State'
  isLoading: boolean;
}

Селекторы:

import { createFeatureSelector, createSelector } from '@ngrx/store';
import { GlobalState } from '../state/global.state';

export const featureSelector = createFeatureSelector<GlobalState>
  (GlobalState.stateName);

export const loadingScreenSelector = createSelector(
  featureSelector,
  state => state.isLoading
);

AppModule imports: [
    StoreModule.forRoot({}),
    StoreModule.forFeature(GlobalState.stateName, globalReducer),
]

У меня есть служба, которая использовала для отправки действия одно с истиной, а другое с ложным.Затем я использую HTTP_INTERCEPTOR и слушаю запросы.Каждый раз, когда появляется новый запрос, я использую сервис для отправки действия с полезной нагрузкой true.И когда запрос (не имеет значения, успешен он или нет), я отправляю действие с полезной нагрузкой false.Действия отправляются, я даже иду в редуктор, когда я проверяю, что newState имеет правильную полезную нагрузку.Но селекторы ничего не получают, когда состояние изменяется.Я действительно попробовал все, и у меня заканчиваются идеи.Любые предложения приветствуются.(

...