web-dev-qa-db-ja.com

Angular 2:文字列名から関数を呼び出す

TypeScript自体にAngular 2以上に関連する質問かどうかはわかりませんが、とにかく、オブジェクトを放出するコンポーネントがあります

<grid" (gridButtonClickEvent)="gridEvent($event)"></grid>

イベントをキャッチする方法は次のとおりです

private gridEvent(event) {
    console.log(event);
}

これが私が得ているもののイベント形式です。

{Key: value}

したがって、基本的には単純なオブジェクトです。 Keyという名前の関数を呼び出して、valueを引数として渡したいのですが、どうすれば可能ですか?オブジェクトKeyは異なりますが、考えられるすべてのバリアントと、コンポーネントに既に登録されている関数を知っています。

private Key() {}

私はこのようなことを試みていました

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

しかし、それは言います

window[eventName] is not a function
10
Lunin Roman

これを試して:

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
    }
}
28
Seid Mehmedovic