在Angular 2中,你使用this
工作很多,这很好,但我发现当你想在组件层次结构中传递一个函数时,它也会产生一个问题。
以此为例:
export class ParentComponent {
myFunctionFromParent() {
this.isActive = true;
}
}
然后我们将此功能传递给孩子:
<parent>
<child [onClick]="myFunctionFromParent"></child>
</parent>
让我们说child
是一个简单的按钮:
<button (click)="onClick()"></button>
现在,当myFunctionFromParent
运行时,this
应该是ParentComponent
,但事实并非如此。
相反,ChildComponent
会更改this.isActive
属性。
这会产生很多问题,因为您无法从子组件执行父函数并期望父属性发生更改。
传递函数的工作方式与您在Angular 1中的预期相同,但现在看起来已经坏了。
这不再是这样做的方式吗? Angular 2中正确的方法是什么?
答案 0 :(得分:1)
我会改用它:
<parent>
<child (onClick)="myFunctionFromParent()"></child>
</parent>
并在子组件中定义@Output
:
@Component({
selector: 'child',
template: `
<button (click)="onClick()"></button>
`
})
export class ChildComponent {
@Output('onClick')
eventHandler:EventEmitter<any> = new EventEmitter();
onClick() {
this.eventHandler.emit();
}
}
答案 1 :(得分:1)
使用默认的Angular数据绑定输入和输出,而不是传递函数:
class ParentComponent {
myFunctionFromParent() {
this.isActive = true;
}
}
class ChildComponent {
@Output() onClick = new EventEmitter();
}
<parent>
<child (onClick)="myFunctionFromParent()"></child>
</parent>
<button (click)="onClick.emit()"></button>