gpt4 book ai didi

angular - 服务的生命周期 Hook

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:05 26 4
gpt4 key购买 nike

无论是在官方文档中,还是在网络上,我都没有找到有关 Angular 2 服务是否支持生命周期 Hook 的信息。大多数 Hook 没有意义,但至少 ngOnInit() 可能非常有用。

实验表明,@Injectable() 上的 ngOnInit() 会导致服务在引导过程中被实例化,即使它没有用户,但它不会被调用。这是一个代码演示:

import { NgModule, Inject, Injectable, OnInit, Component } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

@Component({
template: 'test',
selector: 'my-component'
})
export class MyComponent {
}

@Injectable()
export class MyService /*implements OnInit*/ {
constructor() {
console.debug('constructing MyService');
}

ngOnInit(): void {
console.debug('MyService.ngOnInit');
}
}

@NgModule({
imports: [ BrowserModule ],
providers: [
MyService
],
declarations: [MyComponent],
bootstrap: [ MyComponent ]
})
class AppModule {
}

console.debug('bootstrapping');
platformBrowserDynamic().bootstrapModule(AppModule);

https://plnkr.co/edit/98Q9QqEexYoMRxP3r1Hw?p=info

这是设计使然吗?如果是这样,它可能应该被记录下来。如果不是,则应进行更改。

此问题源于此(大部分已修复)问题:

https://github.com/angular/angular/issues/13811

我不清楚场景 1(问题的非固定部分)是否是有效代码。

最佳答案

为 Angular 2 服务调用的唯一生命周期 Hook 是 ngOnDestroy() :

A lifecycle hook that is called when a directive, pipe, or service is destroyed. Use for any custom cleanup that needs to occur when the instance is destroyed.

至于ngOnInit(),它没有被调用,因为它没有意义:) 你应该将服务初始化逻辑放入它的constructor()

关于angular - 服务的生命周期 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41942805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com