【问题标题】:NgRx 7.4.0: Uncaught TypeError: ctor is not a constructorNgRx 7.4.0:未捕获的 TypeError:ctor 不是构造函数
【发布时间】:2020-01-31 16:53:29
【问题描述】:

我正在努力弄清楚为什么我无法使用 NgRx 版本 7.4.0 注册我的效果。我已经完全剥离了我的效果类以寻找解决此问题的方法,但我仍然收到以下错误:

main.79a79285b0ad5f8b4e8a.js:33529 Uncaught TypeError: ctor is not a constructor
    at _createClass (main.79a79285b0ad5f8b4e8a.js:33529)
    at _createProviderInstance (main.79a79285b0ad5f8b4e8a.js:33501)
    at initNgModule (main.79a79285b0ad5f8b4e8a.js:33432)
    at new NgModuleRef_ (main.79a79285b0ad5f8b4e8a.js:34161)
    at Object.createNgModuleRef (main.79a79285b0ad5f8b4e8a.js:34150)
    at NgModuleFactory_.push../node_modules/@angular/core/fesm5/core.js.NgModuleFactory_.create (main.79a79285b0ad5f8b4e8a.js:36687)
    at main.79a79285b0ad5f8b4e8a.js:30069
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (polyfills.f00ff83aa2c2b28f8bcd.js:7646)
    at Object.onInvoke (main.79a79285b0ad5f8b4e8a.js:29604)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (polyfills.f00ff83aa2c2b28f8bcd.js:7645)

模块定义如下:

@NgModule({
    imports: [
        CommonModule,
        StoreModule.forRoot({settings: settingsReducer}),
        EffectsModule.forRoot([SettingsEffects])
    ],
    declarations: [/*..other declarations..*/],
    exports: [/*..other exports..*/],
    providers: [/*..other providers..*/],
})
export class MyModule {
}

我的package.json 中的依赖项如下所示:

"dependencies": {
    "@ngrx/effects": "7.4.0",
    "@ngrx/router-store": "7.4.0",
    "@ngrx/store": "7.4.0",
    "@ngrx/store-devtools": "7.4.0",
    "ng2-translate": "5.0.0"
  },

我的开发依赖项如下所示:

"devDependencies": {
  "@angular/common": "7.2.15",
  "@angular/compiler": "7.2.15",
  "@angular/compiler-cli": "7.2.15",
  "@angular/core": "7.2.15",
  "@angular/platform-browser": "7.2.15",
  "@angular/platform-browser-dynamic": "7.2.15",
  "@angular/router": "7.2.15",
  "@compodoc/compodoc": "1.0.9",
  "@types/jasmine": "2.5.54",
  "@types/jest": "19.2.4",
  "@types/node": "7.0.43",
  "awesome-typescript-loader": "3.2.3",
  "babel-preset-env": "1.6.0",
  "codelyzer": "4.5.0",
  "core-js": "2.6.10",
  "del": "2.2.2",
  "gulp": "3.9.1",
  "gulp-header": "1.8.9",
  "gulp-rename": "1.2.2",
  "gulp-replace": "0.6.1",
  "gulp-rollup": "2.14.0",
  "gulp-shell": "0.6.3",
  "inquirer": "3.2.2",
  "jasmine-marbles": "0.6.0",
  "jest": "23.6.0",
  "jest-preset-angular": "6.0.2",
  "node-sass": "4.5.3",
  "node-sass-tilde-importer": "1.0.0",
  "node-watch": "0.5.5",
  "rollup": "0.42.0",
  "run-sequence": "1.2.2",
  "rxjs": "6.5.3",
  "rxjs-compat": "6.5.3",
  "ts-node": "7.0.1",
  "tslint": "5.20.0",
  "typescript": "3.2.4",
  "zone.js": "0.8.17"
}

SettingsEffects 类(我已将其剥离,以防问题出在效果类本身)如下所示:

@Injectable()
export class SettingsEffects {

    constructor(
        private actions$: Actions
    ) {
    }

}

在其原始状态下,SettingsEffects 类产生相同的错误。

如果我删除这一行:

EffectsModule.forRoot([SettingsEffects])

从导入中,应用程序成功启动;但当然效果不运行,这不好。

我在全球互联网上进行了搜索,但没有任何线索说明为什么会发生这种情况。该模块位于应用主 GUI 导入的库中,我们一直小心确保没有包版本冲突:所有内容都使用商店模块的 7.4.0 版本。

请帮忙!现在已经为此拉了一天的头发!

【问题讨论】:

标签: javascript angular typescript redux ngrx


【解决方案1】:

我相信您不能将forRoot() 用于这样的功能模块

@NgModule({
    imports: [
        CommonModule,
        StoreModule.forRoot({settings: settingsReducer}),
        EffectsModule.forRoot([SettingsEffects])
    ],
    declarations: [/*..other declarations..*/],
    exports: [/*..other exports..*/],
    providers: [/*..other providers..*/],
})
export class MyModule {
}

试着像这样改变

@NgModule({
    imports: [
        CommonModule,
        StoreModule.forFeature("settings", settingsReducer),
        EffectsModule.forFeature([SettingsEffects])
    ],
    declarations: [/*..other declarations..*/],
    exports: [/*..other exports..*/],
    providers: [/*..other providers..*/],
})

另外,为功能初始化存储的正确方法是提供 2 个参数,而不是像您现在所做的那样传入对象

StoreModule.forRoot({settings: settingsReducer}) // this is wrong

StoreModule.forFeature("settings", settingsReducer) // this is correct

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 2020-09-17
    • 2019-02-13
    • 2018-04-09
    • 2020-07-18
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多