Typescript 角度2范围';结构和部件
全部, 这就是我所拥有的: user-list.component.tsTypescript 角度2范围';结构和部件,typescript,angular,angular2-directives,angular2-services,Typescript,Angular,Angular2 Directives,Angular2 Services,全部, 这就是我所拥有的: user-list.component.ts export class UserListComponent { public userSerivce: UserService; public deleteUser(id) { this.userSerivce.delete(id); } } export class SomeReusableComponent { @Input() deleteFunc: F
export class UserListComponent {
public userSerivce: UserService;
public deleteUser(id) {
this.userSerivce.delete(id);
}
}
export class SomeReusableComponent {
@Input() deleteFunc: Function;
}
user-list.component.html
一些可重用的.component.ts
export class UserListComponent {
public userSerivce: UserService;
public deleteUser(id) {
this.userSerivce.delete(id);
}
}
export class SomeReusableComponent {
@Input() deleteFunc: Function;
}
some-reusables.component.html
这是我的问题:
当我单击按钮时,它会调用UserListComponent
上的函数,但当我提到this
时,它也提到了SomeReusableComponent
,我理解为什么会发生这种情况,但我正在寻找解决方案?您可以在上面的示例中看到对this.userSerivce.delete(id)的调用代码>将失败,因为SomeReusableComponent
上不存在userService
我希望上面的例子有意义
谢谢
Steve我认为更好的方法是使用事件绑定
导出类SomeReusableComponent{
@Output itemDeleted:EventEmitter=new EventEmitter();
handleDelete(实体ID){
itemDeleted.emit(entityId);
}
}
完全同意@Günter
关于您的此
问题,这是因为您在引用函数(甚至从对象)时丢失了此
。要防止出现这种情况,可以使用函数的bind
方法:
delete.bind(this)
我不知道发生了什么事,所以谢谢你!这是一种治疗,你认为这是目前最好的方式,这是未来的证明吗?或者你认为angular2将来会自己处理这种情况吗?我想我在回答中所展示的方式就是angular2的方式。如果你仍然想传递函数,请使用Thierry在其回答中解释的内容,但如果没有充分的理由,我会劝阻你。谢谢@Thierry提供的信息。