【问题标题】:How to Call shared service function in angular 2 View?如何在 Angular 2 视图中调用共享服务功能?
【发布时间】:2018-06-22 13:45:22
【问题描述】:

我想从“另一个”组件的视图文件中调用共享服务功能。

例如要删除一条记录,我想设置如下内容:

<tr *ngFor="let ddata of tableData.data; let i = ddata" 
(click)="delete_record(ddata)" 
[class.active]="ddata.discountauthorizationid == selectedRow">

这里delete_record 必须是我将在相关组件中注入的服务的一部分。

【问题讨论】:

标签: angular angular2-services


【解决方案1】:

如果不将其注入到您的组件中,就无法从视图(模板)调用服务。

您可以将服务注入到一个公共属性中,这样您也可以在模板中使用服务方法。

constructor(public yourService: YourService) {

}

您的模板:

<a (click)="yourService.yourMethod()">Test mehod</a>

注意:请考虑更好的解决方案是调用组件方法而不是使用服务方法。服务是在互不认识的类之间共享信息的好方法

【讨论】:

  • 感谢您的建议。我可以在我的客户中导入它。我的疑问是我是否可以从视图中调用它。我会实施这个并让你知道。
  • @Jaydeep 不客气,如果有帮助我很高兴。如果您需要更多信息,请告诉我
  • 我使用了上述解决方案。现在我可以调用注入的服务,但我只能在构造函数中这样做。
  • 请不要激励任何人在模板中调用服务。这不是一个好习惯
  • @HDJEMAI 只要我知道这不是反模式。请看官方文档上的this code snippet
【解决方案2】:

根据官方文档,在模板中注入公共服务绑定它不是反模式。

https://angular.io/tutorial/toh-pt4

【讨论】:

    【解决方案3】:

    最好在private 范围内使用服务并使用方法将其返回到视图。

    喜欢这篇文章。

    Typescript dependency injection public vs private

    【讨论】:

    • 这比公认的答案更好。
    【解决方案4】:

    组件类中定义的每个属性都可以在模板中使用。

    【讨论】:

    • 私有注入服务,无法从模板访问。
    • 显然您可以从 7.1.4 版本的模板访问私有注入服务。
    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2017-06-29
    • 2016-06-29
    • 2017-01-04
    • 2017-12-21
    • 2017-01-20
    相关资源
    最近更新 更多