在类中动态添加方法

时间:2018-05-11 19:40:52

标签: angular typescript angular5

我正在尝试添加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不是   功能

1 个答案:

答案 0 :(得分:2)

错误表示该方法不存在。有很多方法可以解决这个问题(比如投射到any)但是它们会破坏类型安全性。更好的解决方案是添加一个方法,该方法将密钥作为服务的参数并以此方式调用。

setValue(key: "CalendarDates"|"LastPublishedSchedule"|"ManageStores"|"SelectedStore", value: string) {
   sessionStorage.setItem(key, value);
}
this.utilService.setValue("LastPublishedSchedule", JSON.stringify(response));

您可以为其他方法重复此模式,例如检索值或清除值。

此外,您不必将键约束到值列表,但因为我注意到您对使用的键确实有约束,我将其添加到键参数参数。