我这样做:
import {testInjection} from './ts/models';
import {bootstrap} from 'angular2/platform/browser';
bootstrap(AppComponent, [testInjection]).catch(err => console.error(err));
在型号.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"。有人能告诉我我做错了什么吗。
tnx
如果你做得不对,请制作一个服务
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中,您只需要使用@Injedisele,它应该在服务中使用。在组件中,您只需要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注射的问题。