2017-04-20 13 views
7

tôi đã tạo ra công ty thư viện nội bộ sử dụng máy phát điện yeoman angualr2-thư viện.qua biến môi trường để angular2 thư viện

Một số dịch vụ góc đang sử dụng biến môi trường trong các ứng dụng hiện tại của chúng tôi (điểm cuối api được thay đổi trên mỗi env). Tôi đã tự hỏi cách tốt nhất để vượt qua đối tượng môi trường hiện tại cho các dịch vụ thư viện angular2 là gì?

+0

Bạn có nhận được một câu trả lời cho điều này? Tôi muốn làm điều tương tự – leopic

Trả lời

2

Trong trường hợp bạn vẫn đang tìm kiếm một giải pháp, dưới đây là cách tôi thực hiện một cái gì đó simliar với những gì bạn được yêu cầu (sử dụng 4.2.4 góc).

Trong AppModule (hoặc nơi bạn muốn nhập thư viện của mình), hãy gọi phương thức forRoot() trên LibraryModule của bạn. Với sự trợ giúp của hàm này, bạn có thể chuyển bất kỳ giá trị cấu hình nào cho thư viện của mình, ví dụ: môi trường ứng dụng của bạn.

import {environment} from "../environments/environment"; 
... 

@NgModule({ 
    declarations: [ 
     AppComponent 
    ], 
    imports: [ 
     BrowserModule, 
     ... 
     LibraryModule.forRoot(environment) 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

Bạn LibraryModule tất nhiên cần phải cung cấp các phương pháp forRoot(). Trong mảng nhà cung cấp, bạn có thể cung cấp dịch vụ, giá trị and more. Trong trường hợp này, 'env' hoạt động như mã thông báo giữ đối tượng môi trường nhất định để đơn giản. Bạn cũng có thể sử dụng InjectionToken để thay thế.

@NgModule({ 
    ... 
}) 
export class LibraryModule { 

    public static forRoot(environment: any): ModuleWithProviders { 

     return { 
      ngModule: LibraryModule, 
      providers: [ 
       ImageService, 
       { 
        provide: 'env', // you can also use InjectionToken 
        useValue: environment 
       } 
      ] 
     }; 
    } 
} 

Kể từ khi thẻ env hiện đang được cung cấp bởi LibraryModule của bạn, bạn có thể tiêm nó trong tất cả các dịch vụ mà con hoặc các thành phần của nó.

@Injectable() 
export class ImageService { 

    constructor(private http: Http, @Inject('env') private env) { 
    } 

    load(): Observable<any> { 
     // assume apiUrl exists in you app's environment: 
     return this.http.get(`${this.env.apiUrl}/images`) 
      .map(res => res.json()); 
    } 

} 

Tôi hy vọng điều đó sẽ hữu ích!

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