角度4(AOT)+电子和条件导入

时间:2017-07-29 22:45:22

标签: angular typescript electron

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

只是让你明白我想要实现的目标:

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();

我希望有人已经遇到过这种问题,并指出了正确的方向。

1 个答案:

答案 0 :(得分:0)

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

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中。