【问题标题】:emberjs, how to bind method from controller to service?emberjs,如何将方法从控制器绑定到服务?
【发布时间】:2022-11-02 09:48:07
【问题描述】:

我有很大的 emberjs 应用程序,我需要开始更多地使用 ember 服务。 所以我在我的控制器中有一个方法,我希望它在所有模式和注入服务的组件中都可以作为服务使用。

但它不起作用,并且没有错误......这是一个很好的方法吗?为什么它不工作?

所以我在控制器中的方法是:

openModalPrices () {
        //method in controller
    },

该服务有另一种方法:

openModalPricesFromService () {
        //method in service
    },

在我的控制器中的初始化中,我的绑定是这样的:

init: function() {
   this._super(...arguments);
   this.get('priceService').openModalPricesFromService(this.openModalPrices.bind(this));
}

【问题讨论】:

  • 你的ember版本是什么? “不工作”是什么意思?您到底期望发生什么,会发生什么,为什么您认为这是错误的?通常,您不会在 Controller 上创建随处可用的方法,而是使用服务反而.因此,将功能移至服务。
  • 问题在于,当不在控制器的路由上时,不应调用控制器上的方法。但是服务是全球性的,可以随时随地调用其上的方法。真正的问题是,为什么要将方法保留在控制器中但从服务中调用它?您要解决的真正问题是什么?

标签: javascript ember.js service bind


【解决方案1】:

而不是从控制器初始化(这是一个单例,所以生命周期/创建不是你本机期望的),你可以使用路由的afterModel 钩子吗?

在 2022 年,我个人对控制器的使用为 0,即使是查询参数也是如此。

要从路由调用您的服务方法,我会这样做:

export default class MyRoute extends Route {
  @service myService;

  afterModel() {
    this.myService.openModalPricesFromService();
  }
}

此外,不需要在 emberjs 中使用 bind ——如果你想解决这个问题,请随时打开另一个 StackOverflow 问题 <3

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2013-05-31
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多