【发布时间】:2018-09-01 17:09:20
【问题描述】:
我有以下文件:
/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 内。
我的目标是使用一个文件来存储应用程序的配置值。实际上,如果我在构造函数中取消注释该行但我正在尝试调整以适应标准,则此代码可以正常工作。
对此有什么想法吗?
谢谢。
【问题讨论】:
-
我认为 ngOnInit 不是服务的生命周期,它只能在模块或组件中使用。
-
Angular 服务没有像组件一样的生命钩子。你可以在
constructor做初始化的事情。
标签: angular typescript ionic-framework ionic3