2017-09-11 28 views
0

服务在我app.module.ts角4个ngModule注入提供商/有条件

@NgModule({ 
... 
providers: [MyService, 
      // providers used to create fake backend 
      fakeBackendProvider, 
      MockBackend, 
      BaseRequestOptions 
     ], 
bootstrap: [AppComponent] 
}) 

fakeBackendProvider,MockBackend和BaseRequestOptions是模拟了后端。有没有办法通过environment.ts文件中的变量注入这些服务?

+0

我建议一家工厂供应商:https://angular.io/guide/dependency-injection-in-action#usefactorythe-factory-provider – jonrsharpe

+0

您可以创建自己的服务,将提供适当的实例具有适当接口的服务取决于env标志。你可以看到[我的回购](https://github.com/ArturCzopek/my-coach/blob/master/src/app/shared/services/service.injector.ts)。也许你会看到那里的一些灵感;) –

回答

0

您可以像这样使用它。创建Plunker

//route to environment file 
import { environment } from '../../environments/environment'; 
providers: [MyService, 
      // providers used to create fake backend 
    { 
     provide: SomeSerivce, 
     useFactory: authHeadersFactory 
    },  
    ], 


export function authHeadersFactory() { 
    if (environment.prod) { 
    return new Mock(); 
    } 
    return new fakeBackend(); 
} 
+0

我试过了。但是当我为开发运行'npm start'时,它不断抛出这个错误。 ERROR SyntaxError:意外的标记<在位置0的JSON中 – etlds

+0

您可以共享代码,从我的项目中将其复制粘贴粘贴到其中,并且它可以正常工作。 – alexKhymenko

+0

@etlds创建plunker – alexKhymenko