2017-01-06 13 views
11

Mã dưới đây có thể tải một dịch vụ giả dựa trên các biến môi trường Angular-cli khác nhau. Tuy nhiên, nó có một tác dụng phụ là các dịch vụ giả lập được tích hợp vào các tệp đầu ra được chuyển mã và rút gọn cuối cùng.Cách tải các mô-đun có điều kiện trong Angular 2

Có cách nào tốt hơn để hoàn thành mô-đun tải chậm trong angular2 không?

app.module.ts:

import {BrowserModule} from "@angular/platform-browser"; 
import {NgModule} from "@angular/core"; 
import {FormsModule} from "@angular/forms"; 
import {HttpModule} from "@angular/http"; 
import {AppComponent} from "./app.component"; 
import {environment} from "../environments/environment"; 
import {XService} from "./xxx.service"; 
import {XMockService} from "./xxx-mock.service"; 

let importedModules: Array<any> = [ 
    XService 
]; 

if (environment.mock) { 
    importedModules.push(
    {provide: XService, useClass: XMockService} 
); 
} else { 
    importedModules.push(
    XService 
); 
} 

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule 
    ], 
    providers: importedModules, 
    bootstrap: [AppComponent] 
}) 

export class AppModule {} 
+0

tải chậm https://angular.io/guide/ngmodule#app-routing use loadTrẻ em: 'app/path/to/YourModuleFileName # YourModuleClassName và trong mô-đun đó bạn có thể nhập các mô-đun khác để tải chúng xuống ... nhưng w/nhập khẩu bạn sẽ tải xuống XService và XMockService. Tôi đang tìm một cách để tải về chỉ các mô-đun bạn muốn lúc bootstrapping thời gian dựa trên máy chủ bằng cách sử dụng một cơ sở mã duy nhất. hmm –

Trả lời

2

Bạn có thể thử một cái gì đó tương tự như sau.

main.ts

platformBrowserDynamic().bootstrapModule(RootModule); 

root.module.ts

@NgModule({ 
    imports: [ 
    LandingModule, 
    UserModule 
    ], 
    entryComponents: [PageComponent, UserComponent], 
}) 
export class RootModule { 

    constructor(private router: Router .....) { 
    } 

    ngDoBootstrap(ref: ApplicationRef) { 
    const isUserPageRequested = this.shouldGoToUser(); 
    if (isUserPageRequested) { 
     this.router.resetConfig(userRoutes); 
     ref.bootstrap(UserComponent); 
    } else { 
     ref.bootstrap(PageComponent); 
    } 
    } 
} 

PageComponent được khai báo trong LandingModuleUserComponent được khai báo trong UserModule. Bằng cách này, có thể tải module theo điều kiện trong khi nó hoạt động khi được biên dịch với aot.

+0

Rất hữu ích. Làm việc như quyến rũ. Cảm ơn ! –

Các vấn đề liên quan