2016-03-23 17 views
0

böyle yapıyorum:Angular2, enjekte contants

import {testInjection} from './ts/models'; 
import {bootstrap} from 'angular2/platform/browser'; 

bootstrap(AppComponent, [testInjection]).catch(err => console.error(err)); 

models.ts

let TEST:string = "test"; 

export var testInjection: Array<any>=[ 
    bind(TEST).toValue(TEST) 
]; 

ve ardından AppComponent içinde:

class export AppComponent{ 
constructor(
public http: Http, 
    @Inject(TEST) TEST:string 
    ){ 

    } 
} 

ama bu hatayı almaya: Hata TS2304 : 'TEST' adı bulunamıyor. Birisi bana yanlış yaptığım şeyi gösterebilir.

tnx yanlış bir şekilde yapıyoruz

cevap

0

, Bir Hizmeti

import { Injectable } from '@angular/core'; 

import { testInjection } from './models'; 

@Injectable() 
export class TestService { 
    getTestValue() { 
    return testInjection; 
    } 
} 

Ve AppComponent sadece @Injecatable kullanmak gerekir Angular2 olarak

import {TestService} from './test.service' 
class export AppComponent{ 
constructor(
public http: Http, _testService : TestService){ 
    console.log(_testService.getTestValue()); 
    } 
} 

yapmak ve gerektiği hizmette kullanılmalıdır. Ve bileşende sadece DI olacak :).

iyi yolu, onu Sizin size soru Kullanıldı olarak @ Enjekte kullanmak gerekmez kullanıyorsanız, sadece tür denetleme için, kodunuz için kalıcı kullanmaya çalışıyorsunuz size

0

yardımcı olur umarım türlerini, çağrı yöntemlerini kontrol edebileceğiniz ve istediğiniz her şeyi yapabileceğiniz tek bir hizmet yaratın, şimdi en az bir dekoratör sağlamak için bir hizmet oluşturuyorsanız, @Component veya @Injectable'u kullanabilirsiniz. Böyle -

import { Injectable } from './@angular/core'; 

@Injectable() 
export class TestService { 
    name:string =null; 
    email:string =null; 
.../// 
    constructor(){ 
    //do your stuff 
    } 
} 

ya da böyle bunu kullanabilirsiniz - bu kitlesel birden çok bileşenden başarıyla şimdi bir sınıf oluşturmak

import { Component } from './@angular/core'; 

    @Component({ 
     selector: 'testService' 
    }) 
    export class TestService { 
     name:string =null; 
     email:string =null; 
    .../// 
     constructor(){ 
     //do your stuff 
     } 
    } 
böyle yaparak artık

PS: - It is necessary to decorate class with at least one decorator

kullanılıyor varsa önyükleme sırasında hizmetinizi enjekte eğer şimdi

bootstrap(AppComponent, [TestService]).catch(err => console.error(err)); 

- böyle bootstrap zamanda bu enjekte Her bir bileşen için bu hizmetin açısını otomatik olarak oluşturduğundan, her zaman sağlayıcılar listesinde bunu sağlamanıza gerek yoktur, ancak hizmetinizi içe aktarmanız gerektiğinden daha fazla önyükleme yaparken Hizmetinizi Enjekte Etmiyorsanız ve İhtiyacınız Varsa böyle kullanmak mümkün olduğundan daha sağlayıcılarının listesinde enjekte etmek: -

import { Component } from './@angular/core'; 
import { TestService } from './TestService';  

    @Component({ 
     selector: 'testService', 
     providers: [TestService] 
    }) 
    export class AppComponent { 
     constructor(private service : TestService){ 
     this.service.blabla //now you are able to use your service here 
     } 
    } 

Umut bu bir Angular2 içinde Enjeksiyon ilgili bazı noktaları temizleyin.