Не удается разрешить все параметры для действия ngrx/store.

Я пытаюсь создать действие @ngrx/store со следующим

import { ActionReducer, Action } from '@ngrx/store'
import { StoreService } from 'ng2-storeservice'
import { IPatient, Patient } from './patient.service'

export class PatientActions {
  static ADD = '[Patient] ADD';
  static REMOVE = '[Patient] REMOVE';
  static RESET = '[Patient] RESET';

  constructor( public store: StoreService ) { }

  add( path: string, payload: IPatient ) {
    this.store.dispatch( PatientActions.ADD, payload );
  }

  remove( path: string, payload: IPatient ) {
    this.store.dispatch( PatientActions.REMOVE, payload )
  }

  reset( path: string, payload: IPatient ) {
    this.store.dispatch( PatientActions.RESET, payload )
  }
}

export const patient: ActionReducer<IPatient> = (
    state: IPatient = new Patient(), action: Action ) => {
  switch ( action.type ) {
    case PatientActions.ADD:
      return Object.assign( state, action.payload );

    case PatientActions.REMOVE:
      return Object.assign( {}, state, action.payload );

    case PatientActions.RESET:
      return Object.assign( {}, state, action.payload );

    default:
      return state;
  }
};

Службы должным образом размещены в модуле, который распознается. Запуск приложения выдает следующую ошибку

metadata_resolver.js:499Uncaught Error: Can't resolve all parameters for PatientActions: (?).
    at CompileMetadataResolver.getDependenciesMetadata (http://localhost:4200/main.bundle.js:31019:19)
    at CompileMetadataResolver.getTypeMetadata (http://localhost:4200/main.bundle.js:30920:26)
    at http://localhost:4200/main.bundle.js:31063:41
    at Array.forEach (native)
    at CompileMetadataResolver.getProvidersMetadata (http://localhost:4200/main.bundle.js:31043:19)
    at http://localhost:4200/main.bundle.js:30741:71
    at Array.forEach (native)
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:4200/main.bundle.js:30732:44)
    at http://localhost:4200/main.bundle.js:30745:50
    at Array.forEach (native)

Любая помощь приветствуется. ​


person st_clair_clarke    schedule 22.12.2016    source источник


Ответы (1)


Вам нужно добавить декоратор @Injectable в класс PatientsAction. Вот как Angular добавляет метаданные в класс. Без метаданных Angular не будет знать, как/что вводить.

См. также:

person Paul Samsotha    schedule 23.12.2016
comment
Спасибо. Не могу поверить, что я никогда не видел этого, когда написал так много сервисов! Учиться чему-то все же. Может быть, лучше сообщение об ошибке поможет. Такое загадочное сообщение весьма бесполезно для идентификации проблемы. - person st_clair_clarke; 23.12.2016