- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
HelloComponent
获取一个 SampleService
实例,定义一个服务提供者。当HelloCompoment
被销毁时,我不明白为什么SampleService
会存活。
如果 HelloComponent
按类型获得了一个 SampleService
实例(避免使用 ServiceProvider
),则不会出现任何问题。
示例服务.ts
@Injectable()
export class SampleService implements OnDestroy{
constructor(){
console.log('created new sample service');
}
ngOnDestroy(){
console.log('destroyed sample service');
}
}
你好组件.ts
import { Component, OnInit, OnDestroy } from '@angular/core'
import { SampleService } from '../service/sample.service'
let ServiceFactory = () => {
console.log('Providing new SampleService');
return new SampleService();
};
let ServiceProvider = {
provide: SampleService,
useFactory: ServiceFactory
};
@Component({
selector: 'hello',
templateUrl: './hello.component.html',
providers: [ServiceProvider]
})
export class HelloComponent implements OnInit, OnDestroy {
constructor(private sampleService: SampleService){}
ngOnInit(){
console.log("Hello component created!")
}
ngOnDestroy(){
console.log("Hello component destroyed!")
}
}
这里是 stackblitz:https://stackblitz.com/edit/angular-vkhmma(点击 toggleHello 并查看控制台日志)
如何在组件结束时强制销毁服务?
最佳答案
这是一个 known issue在 Angular 中,但这是(不幸的)设计的。
OnDestroy
回调 Hook 的存在在编译时 被检查,因为您的ServiceProvider
正在包装一个创建 的工厂SampleService
,遗憾的是 Angular 编译器甚至不知道这个钩子(Hook)的存在,所以它永远不会被调用。
关于angular - 使用 useFactory 提供服务时不会触发 ngOnDestroy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578375/
我想弄清楚如何在 Angular 11 中使用 useFactory 作为异步函数。现在我有这个: import { ApolloClientOptions } from 'apollo-client
作为 Angular 的初学者,我在尝试通过 angular-cli 构建我的应用程序时遇到了一个问题。 关注此tutorial之后: 我的 appModule 看起来像: ... providers
useValue 和 useFactory 提供者有什么区别? useFactory 似乎返回一个值,useClass 也返回一个值。 最佳答案 useFactory 采用预期返回值的工厂函数,并且还
HelloComponent 获取一个 SampleService 实例,定义一个服务提供者。当HelloCompoment被销毁时,我不明白为什么SampleService会存活。 如果 Hello
我正在努力集成 angular2-jwt 包。我用自定义配置选项编写了以下函数 import { Http, Headers, RequestOptions } from '@angular/http
一些背景信息:我已经使用 Nswag 和 ASP Net Core 创建了一个生成的 API 客户端。要为 api 客户端设置基本 url,使用以下代码: export const API_BASE_
我使用 Angular AOT 编译器版本 4.1.3 我有一个组件库,它导出一个工厂方法,然后用于提供服务: export function libServiceFactory(itemId: st
一些背景信息:我已经使用 Nswag 和 ASP Net Core 创建了一个生成的 API 客户端。要为 api 客户端设置基本 url,使用以下代码: export const API_BASE_
app.module.ts bootstrap: [AppComponent], declarations: [AppComponent], imports: [
我正在动态创建元素,其中一个元素正在使用 @Inject解析为工厂的 token 。 问题是工厂实例缓存在节点索引上。一旦我的元素从 View 中消失并返回,我希望得到对我的工厂函数的调用;但我不。相
类型 '(configService: ConfigService) => Promise' 不可分配给类型 '(...args: any[]) => ({ retryAttempts?: numbe
我实现了 http 拦截器服务,它可以工作,但我的问题是我不知道如何在提供声明中注入(inject)我自己的服务。 我在控制台中收到运行时错误:No provider for MyService。 H
我使用 window.location 设置可注入(inject)。在我靠近导入的模块中,我定义了变量 const flag = window.location.search.includes('fl
我想使用带有 useFactory 的简单提供程序,它也将使用 deps(学习目的)。 所以我创建了这个 plnkr : //app.module.ts ... const randomFactory
我是 Angular 4 的新手,我刚刚通过 Angular Cli 创建了一个项目,但出现错误 Uncaught TypeError: useValue,useFactory,data is not
我有一个常规的NestJS应用程序,其中有一个负责创建测试数据的模块。。在AppService类中,我调用它来创建应用程序启动时的数据,如下所示。而且它运行得很好。。然而,自从我在应用程序中添加了用于
我是一名优秀的程序员,十分优秀!