2017-02-17 86 views
3

我在綁定動態函數到點擊事件時遇到了一些麻煩。請看下面: -動態(點擊)功能 - Angular2

文件1

<title-bar [actions]='[{title: "Create A New Plan", link: "hello"}]' ></title-bar> 

文件2

<div class="actions" *ngIf="actions"> 
    <a *ngFor="let action of actions" class="ui primary button" (click)="[action.link]()">{{action.title}}</a> 
</div> 

所有代碼的工作完全分開時,我結合在(點擊)action.link。

如果我創建了以下按鈕: -

<button (click)="hello()"></button> 

它調用的Hello()函數,因爲它應該。但由於某種原因,我無法使其動態工作。

有沒有人有一個簡單的解決方案,我可能看過嗎?

該函數調用一個簡單的警告只是用於測試: -

public hello() { 
    alert('test'); 
} 

II試圖單擊事件更改爲以下但沒有喜悅: -

(click)="action.link" 
(click)="[action.link]()" 
(click)="this[action.link]()" 

我得到的以下錯誤分別爲: -

No error, but not function called 
inline template:3:2 caused by: ["hello"] is not a function 
inline template:3:2 caused by: self.parentView.parentView.context[self.context.$implicit.link] is not a function 

任何幫助推正確的方向將是ver非常感謝。

回答

5

在組件需要

get self() { return this; } 

,並在模板

<a *ngFor="let action of actions" class="ui primary button" 
    (click)="self[action.link]()">{{action.title}}</a> 
+1

你能夠解釋和闡述了「獲得自我(){返回此;}」功能? –

+2

使用'(click)=「[action.link]()」'你創建一個包含一個項目'action.link'的數組,並且應用一個函數調用(這不會有效)。通過'(click)=「self [action.link]()」''''''''''''''''''''你引用屬性''self''返回的對象的'action.link'的名稱,這是組件類實例(我認爲是你要)。 '這個'在模板AFAIK中不被支持,所以'self'是一個解決方法來使'this'可用。 –

+0

謝謝你解釋,這項工作完美地工作。 –