簡體   English   中英

NullInjectorError: R3InjectorError(AppModule) 添加提供程序后

[英]NullInjectorError: R3InjectorError(AppModule) After adding providers

添加提供程序后,在 Angular 14 中也會出現 NullInjectorError

代碼如下所示

app.module.ts

import { LogService } from './services/log.service';
import { LogType, Config } from './interface/config';
import { loggerServiceFactory } from './logfactory';
export const config = {
  apiUrl: 'http://localhost:3000',
  logType: LogType.Default
}
 providers: [
    {provide: LogService, useFactory: loggerServiceFactory, deps:[config]}
  ],

loggerServiceFactory

import { AppConfig, LogType } from "./interface/config";
import { ClientService } from "./services/client.service";
import { LogService } from "./services/log.service";

export const loggerServiceFactory = (config: AppConfig) => {
    if(config.logType === LogType.Client) {
        return new ClientService();
    }
    return new LogService();
}

日志服務

import { Injectable } from '@angular/core';

@Injectable()
export class LogService {
  protected id = 0;
  constructor() {
    this.id = Math.random() * 100;
    console.log(`LoggerService ${this.id} created`)
   }
   log(message: string) {
    console.log(`LoggerService ${this.id} log: ${message}`);
   }
}

app.component.ts

constructor(private log: LogService){
    this.log.log('App component constructor');
}

在提供者數組中,您傳遞的是配置 object 而不是依賴項,這就是您收到 NullInjection 錯誤的原因。

一種解決方法是您可以創建新的注入令牌並使用 useValue 方法傳遞值,然后將 CONFIG 依賴項傳遞給 LogService 部門

import { InjectionToken, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import { loggerServiceFactory, LogServiceToken } from './logfactory';
import { LogService } from './logservice';

export const config = {
  apiUrl: 'http://localhost:3000',
  logType: 'log',
};

export const CONFIG = new InjectionToken<typeof config>('CONFIG');

@NgModule({
  imports: [BrowserModule, FormsModule],
  declarations: [AppComponent, HelloComponent],
  providers: [
    { provide: CONFIG, useValue: config },
    {
      provide: LogService,
      useFactory: (config) => {
        return loggerServiceFactory(config);
      },
      deps: [CONFIG],
    },
  ],
  bootstrap: [AppComponent],
})
export class AppModule {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 錯誤 NullInjectorError:R3InjectorError(AppModule) 錯誤:未捕獲(承諾):NullInjectorError:R3InjectorError(AppModule)[baseURL] 錯誤 NullInjectorError:R3InjectorError(AppModule)[MessageService -&gt; MessageService -&gt; MessageService]: 錯誤:未捕獲(承諾):NullInjectorError:R3InjectorError(AppModule)Angular 13 未捕獲(承諾):NullInjectorError: R3InjectorError(AppModule)[FormBuilder -&gt; FormBuilder -&gt; FormBuilder] NullInjectorError: R3InjectorError(AppModule)[Router -&gt; Router -&gt; Router]: NullInjectorError: No provider for Router 錯誤 NullInjectorError:R3InjectorError(AppModule)[NgbDropdown -> NgbDropdown -> NgbDropdown]:NullInjectorError:NgbDropdown 沒有提供者 錯誤錯誤:未捕獲(承諾):NullInjectorError:R3InjectorError(AppModule)[NavbarComponent - &gt; NavbarComponent 錯誤 NullInjectorError: R3InjectorError(AppModule)[InjectionToken HTTP_INTERCEPTORS-&gt;[object Object]-&gt;TransferState-&gt; TransferState -&gt; TransferState] NgxAuthFirebaseUIModule 顯示 ERROR NullInjectorError: R3InjectorError(AppModule)[ActivatedRoute -&gt; ActivatedRoute -&gt; ActivatedRoute]:
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM