Function 角度2:从字符串名称调用函数

Function 角度2:从字符串名称调用函数,function,angular,typescript,eventemitter,Function,Angular,Typescript,Eventemitter,我不确定这个问题是否与Angular 2或更多的字体本身有关。但无论如何,我有一个发射物体的组件 <grid" (gridButtonClickEvent)="gridEvent($event)"></grid> 这是我得到的事件格式 {Key: value} 所以基本上它是一个简单的物体。 我想调用一个名为Key的函数,并将值作为参数传递,这怎么可能呢?对象键会有所不同,但我知道所有可能的变体,并且已经在我的组件中注册了功能 private Key() {} 我在

我不确定这个问题是否与Angular 2或更多的字体本身有关。但无论如何,我有一个发射物体的组件

<grid" (gridButtonClickEvent)="gridEvent($event)"></grid>
这是我得到的事件格式

{Key: value}
所以基本上它是一个简单的物体。 我想调用一个名为
Key
的函数,并将
值作为参数传递,这怎么可能呢?对象
会有所不同,但我知道所有可能的变体,并且已经在我的组件中注册了功能

private Key() {}
我在尝试这样的事情

private gridEvent(event) {
    let eventName = Object.keys(event)[0];
    window[eventName]();
}
但是它说

window[eventName] is not a function
试试这个:

private gridEvent(event) {
    let methodName = Object.keys(event)[0];
    if(this[methodName]) {
        // method exists in the component
        let param = event[methodName];
        this[methodName](param); // call it
    }
}
更直观的方法是将发射对象构造为:

{ methodName: 'method1', methodParam: someValue } 
然后在组件中:

private gridEvent(event) {
    let methodName = event.methodName;
    if(this[methodName]) {
        // method exists on the component
        let param = event.methodParam;
        this[methodName](param); // call it
    }
}

然而,如果不是真的有必要,我个人会避免这样做。而是发出一个应该触发的操作,然后执行一些switch语句来调用相应的方法。我认为这是一种更愚蠢的方法,但更容易推理。

1。您的
窗口中是否有此事件作为属性?2.你为什么要这样做?将函数作为对象属性传递不是很简单吗?这是一个非常有用且简单的解决方案。在Angular 6中就像一个符咒。非常感谢。
private gridEvent(event) {
    let methodName = event.methodName;
    if(this[methodName]) {
        // method exists on the component
        let param = event.methodParam;
        this[methodName](param); // call it
    }
}