我正在创建多个Ember引擎(就像迷你应用程序),它位于父应用程序中。每个引擎都可以定义自己的服务/控制器/路由。但是当你进入引擎的登陆页面时,例如,每个引擎可能会进行完全相同的API调用。
此API调用可能在托管此调用的服务中定义,驻留在引擎中。 的一些-service.js
import ...
export default Service.extend({
store: service(),
getlandingPageInfo(query) {
validateQuery(query);
return this.get('store')
.queryRecord(some-model, query);
},
});
现在,我的其他引擎的目标网页也需要相同的调用。但为此,我必须将所有some-model
some-service
,some-adapter
和some-serializer
复制到该引擎中。如何在一些其他服务DRY中的一个服务中重用这些方法?
Ember不允许在引擎之间导入服务。
答案 0 :(得分:1)
您可以定义引擎的engine.js
哪些服务可以从引擎中的主机应用中获得。见http://ember-engines.com/guide/services
的engine.js
const Eng = Engine.extend({
modulePrefix,
Resolver,
dependencies: {
services: [
'store',
'session',
'ajax',
'router'
],
externalRoutes: ['dashboard']
}
});
但是,如果您在引擎B中有ServiceX
,并希望与引擎A共享该服务,那么您需要创建一个单独的插件(可能是主机应用中的in-repo插件)