实例化Injectable类时未调用ngOnInit

2020/10/16 06:01 · javascript ·  · 0评论

解决类后为什么不ngOnInit()调用Injectable

import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';

@Injectable()
export class MovieDbService implements OnInit {

    constructor(private _movieDbRest: RestApiService){
        window.console.log('FROM constructor()');
    }

    ngOnInit() {
         window.console.log('FROM ngOnInit()');
    }

}

控制台输出

FROM constructor()

生命周期挂钩,类似于OnInit()使用指令和组件。它们不适用于其他类型,例如您所需要的服务。从文档:

组件的生命周期由Angular本身管理。Angular创建,渲染,创建和渲染其子级,在其数据绑定属性更改时对其进行检查,并在将其从DOM中删除之前销毁它。

指令和组件实例具有生命周期,因为Angular创建,更新和销毁它们。

我不知道所有的生命周期挂钩,但是对于销毁,ngOnDestroy实际上是在其提供程序销毁时(例如,由组件提供的Injectable)在Injectable上调用的。

来自 docs :

销毁指令,管道或服务时调用的生命周期挂钩

万一有人对销毁感兴趣,请检查以下问题:

我的dataService初始化后,我必须调用一个函数,相反,我在对我有用的构造函数内部调用了该函数。

注意:此答案仅适用于Angular组件和指令,不适用于服务。

ngOnInit(以及其他生命周期挂钩)没有为我的组件触发时,我遇到了同样的问题,大多数搜索都将我引到了这里。

问题是我使用的是箭头函数语法(=>),如下所示:

class MyComponent implements OnInit {
    // Bad: do not use arrow function
    public ngOnInit = () => {
        console.log("ngOnInit");
    }
}

显然,这在Angular 6中不起作用。使用非箭头函数语法可解决此问题:

class MyComponent implements OnInit {
    public ngOnInit() {
        console.log("ngOnInit");
    }
}
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
import {Service} from "path/to/service/";

@Injectable()
export class MovieDbService implements OnInit {

userId:number=null;

constructor(private _movieDbRest: RestApiService,
            private instanceMyService : Service ){

   // do evreything like OnInit just on services

   this._movieDbRest.callAnyMethod();

   this.userId = this.instanceMyService.getUserId()


}
本文地址:http://javascript.askforanswer.com/shilihuainjectableleishiweidiaoyongngoninit.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!