我有以下文件:
/src/app/app.module.ts
...
@NgModule({
...
providers: [
StatusBar,
SplashScreen,
Storage,
ConfigService,
AuthService,
TodoService,
]
...
})
export class AppModule { }
/src/providers/config.service.ts
import { Injectable } from '@angular/core';
export interface HashTable<T> {
[key: string]: T;
}
@Injectable()
export class ConfigService {
config: HashTable<String> = {
'baseUrl': 'http://127.0.0.1:8080',
};
constructor() { }
getConfig(): HashTable<String> {
return this.config;
}
}
/src/providers/todo.service.ts
import { Injectable, OnInit } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { ConfigService, HashTable } from './config.service';
import { AuthService } from './auth.service';
import 'rxjs/add/operator/map';
@Injectable()
export class TodoService implements OnInit {
config: HashTable<String>;
constructor(private http: Http, private configService: ConfigService, private authService: AuthService) {
// this.getConfig();
}
ngOnInit() {
this.getConfig();
}
getConfig(): void {
this.config = this.configService.getConfig();
}
getTodos() {
return new Promise((resolve, reject) => {
let headers = new Headers();
headers.append('Authorization', this.authService.token);
this.http
.get(
this.config['baseUrl'] + '/api/todos',
{ headers: headers }
)
.map(res => res.json())
.subscribe(
data => {
resolve(data);
},
err => {
reject(err);
}
);
});
}
}
在文件中: todo.service.ts ...
ngOnInit()
没有被触发。我需要这个来触发方法:this.getConfig()
被调用。
另一方面,如果我取消注释构造函数中的行(同一文件),一切正常,但我不希望这样,因为我希望调用ngOnInit
。我已经阅读了一些你应该调用服务负载的地方,在这种情况下:this.getConfig();
内有ngOnInit
。
我的目标是使用文件存储应用程序的配置值。实际上,如果我取消构造函数中的行,但是我正在尝试调整标准,这段代码工作正常。
对此有什么想法吗?
感谢。
答案 0 :(得分:2)
OnInit()
使用指令和组件。它们不能与其他类型一起使用,例如服务。它不适用于Injectable
类。
您的代码不适用于Lifecycle hooks。
答案 1 :(得分:0)
ngOnInit()不适用于服务。
相同解释ngOnInit not being called when Injectable class is Instantiated