我正在尝试添加setter&将放入会话存储的项目的getter。我在服务中编写这些方法。但是当我尝试在我的组件中调用这些函数时,我遇到了错误的错误。
这是服务:
@Injectable()
export class UtilitiesService {
public keySet = [
"CalendarDates",
"LastPublishedSchedule",
"ManageStores",
"SelectedStore"
];
constructor() {
this.addGetSetClearFunctions();
}
addGetFunction(key: string) {
UtilitiesService["get" + key] = function() {
return JSON.parse(sessionStorage.getItem(key));
}
}
addSetFunction(key: string) {
UtilitiesService["set" + key] = function(value) {
sessionStorage.setItem(key, JSON.stringify(value));
}
}
addClearFunction(key: string) {
UtilitiesService["clear" + key] = function() {
sessionStorage.removeItem(key);
}
}
clearAll() {
sessionStorage.clear();
}
addGetSetClearFunctions() {
for(let i = 0; i < this.keySet.length; i++) {
this.addGetFunction(this.keySet[i]);
this.addSetFunction(this.keySet[i]);
this.addClearFunction(this.keySet[i]);
}
}
}
我试图在组件内调用set方法:
this.utilService.setLastPublishedSchedule(JSON.stringify(response));
注意:正确注入了 utilService ,并且它的其他辅助功能(我没有放在这里成功执行)。
编辑#1:这是我得到的错误:
错误 SRC /应用/仪表板/组件/时间表/ schedule.component.ts(344,22): 错误TS2339:属性'setLastPublishedSchedule'不存在 输入'UtilitiesService'。
编辑#2: 我尝试通过以下方式调用方法:
this.utilService['setLastPublishedSchedule'](argument here)
我遇到了这个运行时错误:
ERROR TypeError:_this.utilService.setLastPublishedSchedule不是 功能
答案 0 :(得分:2)
错误表示该方法不存在。有很多方法可以解决这个问题(比如投射到any
)但是它们会破坏类型安全性。更好的解决方案是添加一个方法,该方法将密钥作为服务的参数并以此方式调用。
setValue(key: "CalendarDates"|"LastPublishedSchedule"|"ManageStores"|"SelectedStore", value: string) {
sessionStorage.setItem(key, value);
}
this.utilService.setValue("LastPublishedSchedule", JSON.stringify(response));
您可以为其他方法重复此模式,例如检索值或清除值。
此外,您不必将键约束到值列表,但因为我注意到您对使用的键确实有约束,我将其添加到键参数参数。