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.