2017-02-08 39 views
4

我不確定它是否與Angular 2或更多類型本身相關的問題。但無論如何,我必須發出一個組件對象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 
+0

1.你是否有這個事件作爲你的'window'的屬性? 2.你爲什麼要這樣做?將一個函數作爲對象屬性傳遞並不那麼簡單嗎? – smnbbrv

回答

9

試試這個:

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 
    } 
} 
相關問題