angular - 令人尴尬的简单 NGXS - 无法解析 LanguageState 的所有参数
问题描述
我有点羞于发布这个,但我需要一个橡皮鸭。出于某种原因 - 将带有 HTTPClient 的构造函数添加到此类会导致错误“main.ts:12 Error: Can't resolve all parameters for LanguageState: (?).” 但我只是不知道为什么:
import { State, Action, Selector, StateContext } from "@ngxs/store";
import { ChangeLanguage } from "./language.actions";
import { Languages } from "src/app/globals/language.enum";
import { LabelDB } from "src/app/model/labelDB.model";
import { HttpClient } from '@angular/common/http';
export interface LanguageStateModel {
currentLanguage: Languages;
languageData: {
labels: LabelDB[];
};
}
@State<LanguageStateModel>({
name: 'language',
defaults: {
currentLanguage: Languages.English,
languageData: null,
},
})
export class LanguageState {
constructor(private http: HttpClient) {}
@Selector()
public static getCurrentLanguage(state: LanguageStateModel) {
return state.currentLanguage;
}
@Action(ChangeLanguage)
public changeLanguage(
{ patchState }: StateContext<LanguageStateModel>,
action: ChangeLanguage
) {
patchState({ currentLanguage: action.language });
}
}
我尝试将 HTTPClientModel 作为导入添加到 NGXS 存储模块。尝试使用 Angular Injector 来获取 HTTP 模块。
我只是不明白,我知道它可能非常简单:(
重要提示:我知道我还没有在代码中的任何地方使用 HTTP 客户端 - 这是因为我删除了所有代码以使其正常工作:)
编辑:声明模块是标准的 NGXS Store 模块:
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { NgxsModule } from "@ngxs/store";
import { NgxsReduxDevtoolsPluginModule } from "@ngxs/devtools-plugin";
import { NgxsLoggerPluginModule } from "@ngxs/logger-plugin";
import { environment } from "src/environments/environment";
import { LanguageState } from "./language/language.state";
@NgModule({
declarations: [],
imports: [
CommonModule,
NgxsModule.forRoot([LanguageState], {
developmentMode: !environment.production,
}),
NgxsReduxDevtoolsPluginModule.forRoot({
name: "NGXS store",
disabled: environment.production,
}),
NgxsLoggerPluginModule.forRoot(),
HttpClientModule
]
})
export class LocalNgxsModule {}
解决方案
我假设您使用的是 Angular 9。在最新版本中,所有提供或注入的令牌都必须具有@Injectable()
装饰器。对于 ngxs 状态服务也是如此:
@State<LanguageStateModel>({
name: 'language',
defaults: {
currentLanguage: Languages.English,
languageData: null,
},
})
@Injectable()
export class LanguageState {
// ...
}
在这里阅读更多
推荐阅读
- visual-studio - 无法将现有密钥库导入 Visual Studio 2017
- java - RequestMapping 适用于私有方法
- mysql - 错误代码1064。将数据插入mysql
- php - PHP 发送表单数据和两个不同的电子邮件
- c# - 仅通过转发参数生成调用类私有字段方法的方法?
- android - 我看不到Linearlayout的背景
- sql-server - 无法从存储过程 IN 子句中获取数据
- python - 验证 python 数据类中的详细类型
- blockchain - 无法交易浮动,solidity 智能合约中的分数
- actionscript-3 - Animate ActionScript 3.0 中的按钮超链接