'NullInjectorError:没有 t 的提供者!' @ngrx 的错误

问题描述 投票:0回答:6

我有一个使用 ngrx 12.0.0angular 12.0.2 应用程序。当我运行应用程序并访问延迟加载模块的路由时,出现以下错误。

ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(t)[t -> InjectionToken @ngrx/effects Feature Effects -> [object Object] -> t -> t -> t -> t -> t -> t]: 
  NullInjectorError: No provider for t!
NullInjectorError: R3InjectorError(t)[t -> InjectionToken @ngrx/effects Feature Effects -> [object Object] -> t -> t -> t -> t -> t -> t]: 
  NullInjectorError: No provider for t!
    at fs.get (main.js:1)

我已正确设置 ngrxeffects。请参阅下面显示效果的代码。

UserService
是模块中 provider 中的条目。

该错误并未说明缺少哪个 provider。这不是生产版本,而是我的笔记本电脑中用于测试的版本。

import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { Observable, EMPTY, of } from 'rxjs';
import { catchError, debounceTime, map, switchMap, withLatestFrom, concatMap } from 'rxjs/operators';
import * as UserActions from '../actions/user.actions';
import { VisitorService } from '../../service/visitor.service';
import { asyncScheduler } from 'rxjs';

@Injectable()
export class UserEffects {

  constructor(private actions$: Actions,
    private userService: UserService) { }

  loadUsers$ = createEffect(
    () => ({ debounce = 300, scheduler = asyncScheduler } = {}) => {
      return this.actions$.pipe(
        ofType(UserActions.loadUsers),
        debounceTime(debounce, scheduler),
        switchMap((_) => {
          return this.userService.getUserss().pipe(
            map(users => (UserActions.loadUsersSuccess({ data: users }))),
            catchError(err => of(UserActions.loadUsersFailure(err)))
          );
        })
      );
    });
}
angular ngrx ngrx-effects
6个回答
4
投票

为了获取包含缺少的提供程序的详细错误,您需要在 angular.json 的架构师部分添加

"optimization": false
选项,如下所示:

"architect": {
  "serve": {
    "builder": "@angular-devkit/build-angular:dev-server",
    "options": {
      "optimization": false,
      ...

2
投票

如果您不提供某些内容或者未调用模块上的

forRoot()
方法,通常会抛出错误“No Provider for xyz”

根据您的情况,请检查您如何声明效果。下面是它应该是什么样子的示例

imports: [
  EffectsModule.forRoot([]),
]

如果您的功能是延迟加载的

imports: [
  EffectsModule.forFeature([Feature1Effects, Feature2Effects]),
]


1
投票

对我来说,在我的@NgModule中添加这个之后它就被修复了:

  exports: [HttpClientModule],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],

1
投票

对我来说,正在使用使用路由的服务的应用程序中缺少路由。但问题是我看不到正确的错误消息,因为它是生产版本。因此,当收到这样的消息时,不要忘记首先切换到开发版本,因为我不知何故忘记了。


1
投票

这里,我们需要在模块中添加provider

providers: [
    serviceName
  ]

0
投票

错误“没有 t 的提供商!”当访问其 imports 数组中缺少依赖模块的 standalone 组件时,会发生这种情况。就我而言,我试图从一个独立组件打开一个 MatDialog,该组件在其导入数组中不包含 MatDialogModule

© www.soinside.com 2019 - 2024. All rights reserved.