如何将 Angular 2 函数参数绑定到 parent 作用域?

How to bind Angular 2 function parameter to parent scope?

我的问题如下:我有一个预输入组件,它从我想传递的注入服务的方法中获取下拉选项。我可以在 typeahead 组件中实例化服务并在那里获取数据,但在这种情况下,我的组件将无法从任何服务接收任何类型的服务方法。所以我想做的是:

Parent:

<app-typeahead [typeaheadService]="myservice.getFunction"></app-typeahead>

Child:

  @Input() public typeaheadService: (string) => (Observable<any[]>);

但是当我尝试 运行 它时,我得到 "this.get is not a function" 所以我的猜测是我失去了 parent 范围,我已经尝试将它作为 [typeaheadService]="myservice.getFunction.bind(this)" 但它也不起作用。 请不要建议在 keyup 上发出事件,然后通过参数将结果传递给 children,因为我想在我从订阅中获得结果后做一些事情,或者如果结果为空,我只能这样做如果我处理 children 的结果。 谢谢。

您确实希望将服务功能绑定到服务:

[typeaheadService]="myservice.getFunction.bind(myservice)"

此外,请考虑将绑定函数保存在组件的变量中,否则 angular 将在每个更改检测周期创建一个新函数并更新您的 typeaheadService 输入。

模板:

[typeaheadService]="typeaheadCallback"

和组件:

public readonly typeaheadCallback = myservice.getFunction.bind(myservice);