1

全部,

这就是我所拥有的:

用户列表.component.ts

export class UserListComponent {

    public userSerivce: UserService;

    public deleteUser(id) {
        this.userSerivce.delete(id);
    }
}

用户列表.component.html

<div>
    <some-reusable[deleteFunc]="delete" > </some-reusable><!-- this will bind "delete" on the user- list.component, to "deleteFunc" on  SomeReusableComponent-->
</div>

一些可重用的组件.ts

export class SomeReusableComponent {    
    @Input() deleteFunc: Function;    
}

一些可重用的component.html

<button type="button" (click)="deleteFunc(entityId)" aria-label="Delete" >
    <span class="glyphicon glyphicon-trash" aria-hidden="true"> </span>
</button>

这是我的问题:

当我单击它调用该功能的按钮时UserListComponent就很好,但是当提到this它时SomeReusableComponent,我明白为什么会发生这种情况,但我正在寻找解决方案?您可以在上面的示例中看到调用this.userSerivce.delete(id);将失败,因为userService在 上不存在SomeReusableComponent

我希望上面的例子有意义。

谢谢

史蒂夫

4

2 回答 2

2

完全同意@Günter!

关于您的this问题,这是因为您this在引用函数(甚至来自对象)时丢失了。为了防止这种情况,您可以使用bind函数的方法:

delete.bind(this)
于 2016-02-15T10:32:59.833 回答
1

我认为更好的方法是使用事件绑定

export class SomeReusableComponent {    
    @Output itemDeleted:EventEmitter = new EventEmitter();

    handleDelete(entityId) {
      itemDeleted.emit(entityId);
    }
}
<button type="button" (click)="handleDelete(entityId)" aria-label="Delete" >
    <span class="glyphicon glyphicon-trash" aria-hidden="true"> </span>
</button>
<some-reusable (itemDeleted)="delete($event)" > </some-reusable>
于 2016-02-15T10:30:52.903 回答