2016-11-12 17 views

cevap

-1

Açısal takım here yılında önerir resmi yolu var bu

//our root app component 
import {Component, NgModule, Injectable} from '@angular/core' 
import {BrowserModule} from '@angular/platform-browser' 


@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    private myService; 
    constructor() { 
    this.myService = new MyService('value'); 
    this.name = 'Angular2' 
    } 
} 



@Injectable() 
export class MyService { 
    private myInit:any; 

    constructor(init: any) { 
    this.myInit = init; 
    console.log('init', this.myInit); 
    } 
} 




@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 
+2

Enjekte etmek yerine anında örnek oluyorsunuz. Bu rotaya gidersem, kurucuyu (özel myService: MyService) tercih ederim { myService.name = 'Angular2'; } 'aslında servise enjekte edildi. – gt6707a

9

gibi hizmetlerde parametreleri enjekte, kodumu görüyoruz. Temelde statik olarak yazılan yapılandırma sınıfları enjekte etmenizi sağlar.

1) app.config.ts

import { OpaqueToken } from "@angular/core"; 

export let APP_CONFIG = new OpaqueToken("app.config"); 

export interface IAppConfig { 
    apiEndpoint: string; 
} 

export const AppConfig: IAppConfig = {  
    apiEndpoint: "http://localhost:15422/api/"  
}; 

2) app.module.ts

import { APP_CONFIG, AppConfig } from './app.config'; 

@NgModule({ 
    providers: [ 
     { provide: APP_CONFIG, useValue: AppConfig } 
    ] 
}) 

3) your.service.ts

import { APP_CONFIG, IAppConfig } from './app.config'; 

@Injectable() 
export class YourService { 

    constructor(@Inject(APP_CONFIG) private config: IAppConfig) { 
      // You can use config.apiEndpoint now 
    } 
} 
01:

başarıyla burada uygulanacak ve tüm ilgili koddur

Artık dize adlarını kullanmadan ve statik çekler için arabiriminizi kullanarak her yerde yapılandırmayı enjekte edebilirsiniz. Üretim ve geliştirmede farklı değerler sağlayabilmek için elbette Arabirimi ve sabiti daha da ayırabilirsiniz, örn.

+2

Bu, bilinen statik değerler için çalışır. Angular'a, hizmeti kurucu (desene yapışan) kullanarak, çalışma zamanında belirlenen değerlerle başlatmak için anlatabilir miyim merak ediyorum. – gt6707a

+0

Peki, bu sıradan bir hizmet. Sadece bir hizmet olarak arama, ve burada git :) –

+0

Güncelleme! Angular4 OpaqueToken'de kullanımdan kaldırıldı ve yerine InjectionToken verilecek. InjectionToken bir jenerik tip parametresi iletmek için izin verir. 1) https://stackoverflow.com/questions/41289264/what-is-in-angular-2-opaque-token-and-whats-the-point 2) https://arturas.smorgun.com /2017/06/08/inject-environment-configuration-into-service-in-angular4.html – WRDev

İlgili konular