2017-09-11 56 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