2016-05-03 82 views
4

在Angular 2應用程序中,假設我有一個'SaveComponent',其中單擊保存按鈕調用函數isDirty(),該函數返回true或false(如果父組件的內容已被修改)。請注意,「SaveComponent」的原因是它具有與許多組件共享的樣式和與其關聯的其他「小部件」。Angular 2:如何將函數傳遞給子組件

目前有每個父組件定義的isDirty功能,並且該功能傳遞給SaveComponent父模板裏面如下:

<save-component [isDirty]="isDirty"> </save-component> 

,如果你願意看到的,SaveComponent簡化版定義是這樣的......

import {Component, Input} from 'angular2/core'; 

@Component({ 
    selector: 'save-component', 
    templateUrl: 'who-cares-to-know.component.html' 
}) 

export class SaveComponent { 
    @Input() isDirty; 
} 

它的工作原理只有開始。看起來isDirty函數只返回false(或者只調用一次?),即使內容被修改。請注意,該函數在從父組件調用時可以正常工作。

怎麼了?是否可以通過@Input或其他方式將函數從父項傳遞給子項?謝謝!

+0

你在做'[(ngModel)] =「isDirty」'上的文本框或東西來更新你的價值? (在父組件上) –

回答

5

問題在於,在引用它時即丟失了方法的上下文,即「this」關鍵字。

我會使用類似的東西:

getIsDirty() { 
    return() => { 
    return this.isDirty(); 
    } 
} 

使用箭頭功能,您將能夠使用這個詞彙。後者對應於組件實例本身。

並將其提供給次要成分是這樣的:

<save-component [isDirty]="getIsDirty()"> </save-component> 
+0

看起來這會返回Child組件中的函數本身,對於@Input()isDirty是否需要做任何事情? –

相關問題