首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular 4 (AOT) +电子和条件输入

Angular 4 (AOT) +电子和条件输入
EN

Stack Overflow用户
提问于 2017-07-30 06:45:22
回答 1查看 290关注 0票数 2

我是Angular/Typescript的新手,我正在使用Electron和Angular 4开发一个跨平台的桌面应用程序。我遇到的问题是,我计划在我的不同组件中使用服务,但我希望根据应用程序运行的平台,从不同的文件加载此服务

为了让你明白我想要达到的目的:

代码语言:javascript
运行
复制
if (process.platform === 'darwin') { // Mac
   import { MyService } from './path/to/the/mac/service/file';
} else if (process.platform === 'windows' { // Windows
   import { MyService } from './path/to/the/windows/service/file';
} 

而困扰我的是,我需要使用AOT编译,所以我不能使用require();

我希望已经有人遇到过这样的问题,可以给我指出正确的方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-30 08:43:36

只要两个服务具有相同的接口,这似乎就是一个使用FactoryProvider的好地方。在我工作过的其他应用程序中,此模式适用于AOT。

代码语言:javascript
运行
复制
import { FactoryProvider } from '@angular/core';
import { MyService as MySerivceWindows } from './path/to/the/windows/service/file';
import { MyService as MyServiceMac } from './path/to/the/mac/service/file';

export abstract class MyService{};

export function myFactoryProvider(){
       if (process.platform === 'darwin') { // Mac
            return new MyServiceMac();
       }else{
            return new MySeviceWindows();
       }
}

const MY_SERVICE_PROVIDER: FactoryProvider = {
     provide: MyService, 
     useFactory: myFactoryProvider
 };

然后,您可以在需要的地方导入和注入抽象类到组件中。

最好也提供流程并将其注入到工厂的deps中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45394753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档