【问题标题】:ngOnInit() not getting triggedngOnInit() 没有被触发
【发布时间】: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


【解决方案1】:

OnInit() 使用指令和组件。它们不适用于其他类型,例如服务。它不适用于Injectable 类。 您的代码不适用于 Lifecycle hooks

【讨论】:

  • 快乐编码:)
【解决方案2】:

ngOnInit() 不适用于服务。

ngOnInit not being called when Injectable class is Instantiated也解释了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2017-11-22
    • 2012-06-03
    • 2019-11-07
    • 2018-12-03
    • 2021-04-23
    • 2019-01-30
    相关资源
    最近更新 更多