Javascript NgRx 7.4.0:未捕获类型错误:ctor不是构造函数
我正在努力找出为什么我不能使用NgRx版本7.4.0注册我的效果。我已经完全剥离了我的特效类,寻找解决此问题的方法,但我仍然收到以下错误:Javascript NgRx 7.4.0:未捕获类型错误:ctor不是构造函数,javascript,angular,typescript,redux,ngrx,Javascript,Angular,Typescript,Redux,Ngrx,我正在努力找出为什么我不能使用NgRx版本7.4.0注册我的效果。我已经完全剥离了我的特效类,寻找解决此问题的方法,但我仍然收到以下错误: main.79a79285b0ad5f8b4e8a.js:33529 Uncaught TypeError: ctor is not a constructor at _createClass (main.79a79285b0ad5f8b4e8a.js:33529) at _createProviderInstance (main.79a79
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({
进口:[
公共模块,
forRoot({settings:settingsReducer}),
EffectsModule.forRoot([SettingsEffects])
],
声明:[/*…其他声明..*/],
出口:[/*…其他出口..*/],
提供者:[/*…其他提供者..*/],
})
导出类MyModule{
}
mypackage.json中的依赖项如下所示:
“依赖项”:{
“@ngrx/effects”:“7.4.0”,
“@ngrx/路由器存储”:“7.4.0”,
“@ngrx/store”:“7.4.0”,
“@ngrx/store devtools”:“7.4.0”,
“ng2翻译”:“5.0.0”
},
我的开发依赖项如下所示:
“开发依赖性”:{
“@angular/common”:“7.2.15”,
“@angular/compiler”:“7.2.15”,
“@angular/compiler cli”:“7.2.15”,
“@angular/core”:“7.2.15”,
“@角度/平台浏览器”:“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”,
“很棒的typescript加载程序”:“3.2.3”,
“巴别塔预设环境”:“1.6.0”,
“codelyzer”:“4.5.0”,
“核心js”:“2.6.10”,
“删除”:“2.2.2”,
“吞咽”:“3.9.1”,
“吞咽头”:“1.8.9”,
“吞咽重命名”:“1.2.2”,
“大口替换”:“0.6.1”,
“吞咽汇总”:“2.14.0”,
“吞壳”:“0.6.3”,
“查询者”:“3.2.2”,
“茉莉花大理石”:“0.6.0”,
“笑话”:“23.6.0”,
“开玩笑”:“6.0.2”,
“节点sass”:“4.5.3”,
“节点sass瓷砖导入器”:“1.0.0”,
“节点监视”:“0.5.5”,
“汇总”:“0.42.0”,
“运行顺序”:“1.2.2”,
“rxjs”:“6.5.3”,
“rxjs compat”:“6.5.3”,
“ts节点”:“7.0.1”,
“tslint”:“5.20.0”,
“类型脚本”:“3.2.4”,
“zone.js”:“0.8.17”
}
settingseeffects
类-我已将其剥离回去,以防问题出现在effects类本身-如下所示:
@Injectable()
导出类设置效果{
建造师(
私有操作$:操作
) {
}
}
在原始状态下,settingseeffects
类会产生相同的错误
如果我删除此行:
EffectsModule.forRoot([SettingsEffects])
从导入中,应用程序成功启动;但当然效果不会运行,这是不好的
我在万维网上搜索过,但没有任何线索可以解释为什么会发生这种情况。该模块位于应用程序的主GUI导入的库中,我们一直小心确保没有包版本冲突:所有模块都使用商店模块的7.4.0版本
请帮忙!这件事让我紧张了一天 我相信您不能将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..*/],
})
试着像这样改变
@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
您可以尝试向forRoot提供一个空数组,看看会发生什么:EffectsModule.forRoot([]),也可以看看这个讨论=>