在我的应用程序中,我使用初始化程序将服务注入到路由、控制器和组件中。我现在正在尝试使用 ember 引擎。我已将我的应用程序服务共享给我的引擎,但我需要使用初始化程序将共享的应用程序服务注入引擎的路由、控制器和组件。
在我的应用程序中,我可以生成一个初始化程序并注入服务。如何在我的引擎中做到这一点?
在我的应用程序中,我使用初始化程序将服务注入到路由、控制器和组件中。我现在正在尝试使用 ember 引擎。我已将我的应用程序服务共享给我的引擎,但我需要使用初始化程序将共享的应用程序服务注入引擎的路由、控制器和组件。
在我的应用程序中,我可以生成一个初始化程序并注入服务。如何在我的引擎中做到这一点?
此命令应在 in-repo-engine 下的正确文件夹中创建初始化程序:
ember g initializer <init-name> -ir <engine-name>
理想情况下,最好按照另一个答案中的说明将服务注入控制器/路由/组件。
参考:https ://guides.emberjs.com/release/applications/dependency-injection/#toc_ad-hoc-injections
在需要的地方需要它而不是到处注入它可能更容易。
Ember 文档中的一个示例:
import Component from '@ember/component';
import { inject as service } from '@ember/service';
export default Component.extend({
shoppingCart: service()
});
这将使购物车服务在此处可用。您可以在路由和控制器中做同样的事情,并且该服务是一个单例,因此它只会被实例化一次并在每个访问它的位置之间共享状态。
这避免了需要完全创建特定于引擎的初始化程序。
我实际上发现引擎的初始化程序可以与应用程序的初始化程序类似地配置。可以在lib/<engine>/addon/initializers
目录中指定。
如果您想向路由、组件和控制器注入服务,您必须首先将服务从应用程序共享到引擎,如引擎文档中所述。