2017-06-13 41 views
1

我有多個應用程序在Ionic 2和3開發。他們共享相同的登錄服務器,並且登錄代碼是相同的所有應用程序,我拆分成一個獨立的git存儲庫。在每個應用的應用/目錄,存在帶有config.ts文件:角模塊訪問主應用程序數據

export const APPNAME = 'appname'; 
export const API = 'https://api.appname.com'; 

我包括在app.module.ts登錄模塊作爲角模塊:

@NgModule({ 
    declarations: [ 
    MainApp 
    ], 
    imports: [ 
    ... 
    LoginModule.forRoot() 
] 

和登錄。 module.ts是:

import { NgModule, ModuleWithProviders } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { AuthService } from './auth.service'; 

@NgModule({ 
    imports: [CommonModule], 
    providers: [AuthService] 
}) 
export class LoginModule { 
    static forRoot(): ModuleWithProviders { 
     return { 
      ngModule: LoginModule, 
      providers: [AuthService] 
     } 
    } 
} 

問題是模塊需要APPNAME和API地址來做登錄的東西。整個模塊獨立於主應用程序,我作爲位於src/providers/login中的git子模塊添加到項目中。但是,當像LoginPage或RegisterPage模塊的頁面組件,我需要這些常量,我做的:

import { AuthService } from '../auth.service'; 
import { APPNAME, API } from '../../app/config'; 

@IonicPage() 
@Component({ 
    selector: 'page-login', 
    templateUrl: 'login.html' 
}) 
export class LoginPage { 

這是代碼的唯一行是專門引用主要的應用程序。我想通過在主應用中通過forRoot()傳遞config來反轉該引用,但是我不知道如何在模塊的頁面組件中檢索它。我是否應該以某種方式將它們導入到AuthService中,然後通過頁面組件中的服務訪問它們?我怎樣才能做到這一點?

回答

1

我終於解決了通過服務傳遞數據。在app.module.ts添加的應用數據:

@NgModule({ 
    declarations: [ 
    MainApp 
    ], 
    imports: [ 
    ... 
    LoginModule.forRoot({APPNAME, API}) 
] 

而在模塊,將其傳遞給服務:

export class LoginModule { 
    static forRoot(appData: any): ModuleWithProviders { 
     return { 
      ngModule: LoginModule, 
      providers: [AuthService, { provide: 'appData', useValue: appData }] 
     } 
    } 
} 

在服務上,注入它:

@Injectable() 
export class AuthService { 

    constructor(
    @Inject('appData') public config 
) { 
    console.log(config) 
    } 
[...] 

編輯:此解決方案不能在AOT模式下工作,您需要導出爲工廠功能並創建一個服務實例

export function AppConfig() { 
    return { 
     APPNAME: APPNAME, 
     API: API 
    }; 
} 

constructor(
    @Inject('appData') _appData: any 
) { 
    this.config = _appData(); 
相關問題