在Angular 2应用程序中,假设我有'SaveComponent',其中单击其保存按钮会调用返回true或false的函数 isDirty()
(如果父组件的内容已被修改,则为true) . 请注意'SaveComponent'的原因是它有许多组件共享的样式和与之关联的其他'widgets' .
目前在每个父组件中定义了一个 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
或其他方式将函数从父组件传递给子组件?谢谢!
2 回答
问题是您在引用方法时丢失了方法的上下文,即“this”关键字 .
我会用这样的东西:
使用箭头功能,您将能够使用词法 . 后者对应于组件实例本身 .
并以这种方式将其提供给子组件:
我意识到这已经过时了,但我刚刚遇到了这个问题,所以希望这可以帮助一些人前进 . 我也尝试编辑第一个答案但是被拒绝了,我没有足够的声誉来评论第一个答案 .
第一个答案是正确的,但它并不完整 . 要在子组件中调用父函数,您需要将
@Input() isDirty
视为函数而不是属性 .调用
this.isDirty()
而不是this.isDirty
以运行该函数 .