Angular 2:从字符串名称调用函数

Lun*_*man 13 function eventemitter typescript angular

我不确定与Typeular本身有关的Angular 2或更多问题.但无论如何,我有一个发射对象的组件

<grid" (gridButtonClickEvent)="gridEvent($event)"></grid>
Run Code Online (Sandbox Code Playgroud)

以下是我如何捕捉这一事件

private gridEvent(event) {
    console.log(event);
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的事件格式.

{Key: value}
Run Code Online (Sandbox Code Playgroud)

所以基本上它是一个简单的对象.我想用名称调用一个函数Key并传递一个value参数,它怎么可能?对象Key会有所不同,但我知道我的组件中所有可能的变体和已注册的函数.

private Key() {}
Run Code Online (Sandbox Code Playgroud)

我正在尝试这样的事情

private gridEvent(event) {
    let eventName = Object.keys(event)[0];
    window[eventName]();
}
Run Code Online (Sandbox Code Playgroud)

但它说

window[eventName] is not a function
Run Code Online (Sandbox Code Playgroud)

Sei*_*vic 32

试试这个:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

更直观的方法是将发射对象构造为:

{ methodName: 'method1', methodParam: someValue } 
Run Code Online (Sandbox Code Playgroud)

然后在组件中:

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