web-dev-qa-db-fra.com

Angular 2: fonction d'appel à partir d'un nom de chaîne

Je ne suis pas sûr que cette question soit liée à Angular 2 ou plus à TypeScript lui-même. Mais de toute façon, j'ai un composant qui émet un objet

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

Voici comment j'attrape l'événement

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

Voici le format d'événement de ce que je reçois.

{Key: value}

Donc, fondamentalement, c'est un objet simple. Je veux appeler une fonction avec le nom Key et passer un value comme argument, comment est-ce possible? L'objet Key serait différent, mais je connais toutes les variantes possibles et la fonction déjà enregistrée dans mon composant.

private Key() {}

J'essayais quelque chose comme ça

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

Mais ça dit

window[eventName] is not a function
10
Lunin Roman

Essaye ça:

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
    }
}

Une manière plus intuitive serait de construire votre objet émetteur comme:

{ methodName: 'method1', methodParam: someValue } 

Puis dans le composant:

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