Angular 2:如何将简单类型注入您的服务
Angular 2: How to inject simple types into your service
我有一个只有一个字符串参数的基本服务
import {Injectable} from 'angular2/core';
@Injectable()
export class MyService {
constructor(someValue: string) {
}
}
如果我从构造函数中删除字符串参数,服务将正常注入,但我似乎无法弄清楚如何获得一个简单的字符串来注入。
我已经定义了一个配置来存储应用程序设置
import {OpaqueToken} from 'angular2/core';
export let APP_CONFIG = new OpaqueToken('app.config');
export interface Config {
appSetting: string,
}
export const CONFIG: Config = {
appSetting: "my application nsetting"
};
我为 MyService 定义了一个工厂
import {provide} from 'angular2/core';
import {MyService} from './my.service';
import {Config, CONFIG} from './app.config';
let myServiceFactory = (config: Config) => {
return new MyService(config.appSetting);
}
export let myServiceProvider =
provide(MyService, {
useFactory: myServiceFactory,
deps: [CONFIG]
});
在我的引导过程中,我注册了提供程序
import {bootstrap} from 'angular2/platform/browser';
import {AppComponent} from './app.component';
import {provide} from 'angular2/core';
import {APP_CONFIG, CONFIG} from './app.config';
import {myServiceProvider} from './my.service.provider';
bootstrap(AppComponent,
[provide(APP_CONFIG, { useValue: CONFIG }),
myServiceProvider
]);
在我的应用程序组件中,我尝试注入 myService
import {Component} from 'angular2/core';
import {MyService} from './my.service';
@Component({
selector: 'my-app',
template: '<h1>Angular 2 is running</h1>'
providers: [
MyService
]
})
export class AppComponent {
constructor(private _myService: MyService) {
}
}
应用程序从未启动,我收到此错误
0x800a139e - JavaScript runtime error: Uncaught (in promise): No provider for String! (AppComponent -> MyService -> String)
检查此 plank,我已尝试修复您的样本。您可以使用 OpaqueTokens 以与 Config 对象相同的方式注入字符串值。
最重要的部分:
deps: [APP_CONFIG]
provide(APP_CONFIG, { useValue: CONFIG })
我有一个只有一个字符串参数的基本服务
import {Injectable} from 'angular2/core';
@Injectable()
export class MyService {
constructor(someValue: string) {
}
}
如果我从构造函数中删除字符串参数,服务将正常注入,但我似乎无法弄清楚如何获得一个简单的字符串来注入。
我已经定义了一个配置来存储应用程序设置
import {OpaqueToken} from 'angular2/core';
export let APP_CONFIG = new OpaqueToken('app.config');
export interface Config {
appSetting: string,
}
export const CONFIG: Config = {
appSetting: "my application nsetting"
};
我为 MyService 定义了一个工厂
import {provide} from 'angular2/core';
import {MyService} from './my.service';
import {Config, CONFIG} from './app.config';
let myServiceFactory = (config: Config) => {
return new MyService(config.appSetting);
}
export let myServiceProvider =
provide(MyService, {
useFactory: myServiceFactory,
deps: [CONFIG]
});
在我的引导过程中,我注册了提供程序
import {bootstrap} from 'angular2/platform/browser';
import {AppComponent} from './app.component';
import {provide} from 'angular2/core';
import {APP_CONFIG, CONFIG} from './app.config';
import {myServiceProvider} from './my.service.provider';
bootstrap(AppComponent,
[provide(APP_CONFIG, { useValue: CONFIG }),
myServiceProvider
]);
在我的应用程序组件中,我尝试注入 myService
import {Component} from 'angular2/core';
import {MyService} from './my.service';
@Component({
selector: 'my-app',
template: '<h1>Angular 2 is running</h1>'
providers: [
MyService
]
})
export class AppComponent {
constructor(private _myService: MyService) {
}
}
应用程序从未启动,我收到此错误
0x800a139e - JavaScript runtime error: Uncaught (in promise): No provider for String! (AppComponent -> MyService -> String)
检查此 plank,我已尝试修复您的样本。您可以使用 OpaqueTokens 以与 Config 对象相同的方式注入字符串值。
最重要的部分:
deps: [APP_CONFIG]
provide(APP_CONFIG, { useValue: CONFIG })