Angular2, Инъекционные константы

Я делаю так:

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)
];

а затем в AppComponent:

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

  }
}

но получаю эту ошибку: ошибка TS2304: не удается найти имя 'TEST'. Может ли кто-то просто указать мне, что я делаю неправильно.

Тпх

2 ответа

Вы делаете неправильно, сделайте Сервис

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

import { testInjection } from './models';

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

И в вашем AppComponent

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

В Angular2 вам нужно использовать только @Injecatable, и его следует использовать в сервисе. А в компоненте вам просто нужно DI:) . надеюсь, это поможет вам

Вы пытаетесь использовать модальный для вашего кода, просто для проверки типа, если вы используете, как вы использовали в вопросе, вам не нужно использовать @inject,

Лучший способ создать единый сервис, в котором вы можете проверять типы, вызывать методы и делать все, что захотите, теперь, если вы собираетесь создать сервис, чем необходимо предоставить хотя бы один декоратор, либо вы можете @Component или вы можете использовать @Injectable, как это -

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

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

или вы также можете использовать это так -

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

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

PS: - Нужно украсить класс хотя бы одним декоратором

тем самым вы успешно создали один класс, теперь, если этот класс используется в нескольких компонентах, вы можете добавить его во время начальной загрузки следующим образом:

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

теперь, если вы внедряете свой сервис во время начальной загрузки, вам не нужно указывать это каждый раз в списке поставщиков, поскольку angular автоматически создает экземпляр этого сервиса для каждого компонента,

Но если вы не внедрили свой сервис во время начальной загрузки, вам нужно импортировать свой сервис, а также добавить его в список поставщиков, чем вы можете использовать его следующим образом: -

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
      }
    }

Надеюсь, что это прояснить некоторые моменты, касающиеся инъекций в Angular2.

Другие вопросы по тегам