Angular 15中使用inject()初始化Datadog Rum报错问题咨询
正确使用Angular 15的
inject()初始化Datadog Rum 错误原因
inject() 仅能用于获取Angular依赖注入(DI)容器中已注册的服务/Token,而 datadogRum.init 是第三方库的普通函数,并未在Angular DI系统中注册,因此直接使用 inject(datadogRum.init) 会触发「找不到提供者」的错误。
正确实现方式
方式1:直接调用初始化(无需注入)
如果仅需将初始化逻辑从构造函数转移到合适位置,无需依赖Angular DI,直接调用datadogRum.init即可:
import { datadogRum } from '@datadog/browser-rum'; import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-your-component', templateUrl: './your-component.component.html' }) export class YourComponent implements OnInit { ngOnInit(): void { datadogRum.init({ applicationId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', clientToken: 'EX-app', // 补充其他Datadog配置项 }); } }
方式2:封装为Angular可注入服务(推荐)
若希望遵循Angular最佳实践,将Datadog Rum的管理封装为可注入服务,通过inject()注入该服务:
- 创建Datadog Rum服务:
// datadog-rum.service.ts import { Injectable } from '@angular/core'; import { datadogRum } from '@datadog/browser-rum'; import { environment } from '../environments/environment'; @Injectable({ providedIn: 'root' }) export class DatadogRumService { constructor() { this.initializeRum(); } private initializeRum(): void { datadogRum.init({ applicationId: environment.datadog.applicationId, clientToken: environment.datadog.clientToken, site: 'datadoghq.com', service: 'your-app-service-name', env: environment.production ? 'production' : 'development', // 其他配置项 }); } // 可额外封装Datadog的其他方法供组件调用 addError(error: Error): void { datadogRum.addError(error); } }
- 在组件中注入该服务:
import { Component, OnInit, inject } from '@angular/core'; import { DatadogRumService } from './datadog-rum.service'; @Component({ selector: 'app-your-component', templateUrl: './your-component.component.html' }) export class YourComponent implements OnInit { // 使用inject()注入封装好的Datadog服务 private readonly datadogService = inject(DatadogRumService); ngOnInit(): void { // 服务已在构造函数中完成全局初始化,无需额外操作 // 如需调用Datadog方法,可通过this.datadogService调用 // this.datadogService.addError(new Error('Test error')); } }
注意事项
Datadog Rum的初始化只需执行一次,因此推荐在根级服务的构造函数中完成初始化,避免重复调用init导致的异常。
内容的提问来源于stack exchange,提问作者utente
相关产品推荐
相关产品推荐

