NG0201: No provider for t found

238 Views Asked by At

I am trying to use a directive on one of my Angular components. Please help resolve the following error:

core.mjs:6494 ERROR Error: NG0201: No provider for t found
    at F (core.mjs:254:11)
    at kn (core.mjs:3411:21)
    at Module.Fc (core.mjs:14433:12)
    at n.ɵfac [as factory] (environment-permission.directive.ts:9:44)
    at mi (core.mjs:3574:44)
    at Jv (core.mjs:10332:27)
    at Ah (core.mjs:9661:5)
    at Module.id (core.mjs:14578:9)
    at no (asset-list.component.html:37:5)
    at Dp (core.mjs:9632:9)

Directive code:

@Directive({
  selector: '[appEnvPermission]'
})
export class EnvironmentPermissionDirective {
  private permission$ = new BehaviorSubject<string>(null);

  @Input()
  set appEnvPermission(permission: string) {
    this.permission$.next(permission);
  }

  constructor(
    templateRef: TemplateRef<any>,
    viewContainer: ViewContainerRef,
    configService: ConfigurationService,
    permissionService: PermissionService,
  ) {
    combineLatest([configService.getEnvironment(), this.permission$ ]).subscribe({
      next: ([ env, permission ]) => {
        viewContainer.clear();
        if (permissionService.hasEnvPermission(env.name, permission)) {
          viewContainer.createEmbeddedView(templateRef);
        }
      },
      error: err => {
        viewContainer.clear();
        // viewContainer.createEmbeddedView(templateRef);
      },
    });
  }
}

How the directive is currently being used in the AssetListComponent:

    <div [appEnvPermission]="'asset.download'" *ngIf="!isAssetView()" class="my-auto">

and the AssetRevisionsComponent:

<div [appEnvPermission]="'asset.download'" class="my-auto mx-3" *ngIf="configService.getCurrentEnvironment().upload">
    

Component belongs to AssetsModule:

@NgModule({
  declarations: [
    AssetListComponent,
    AssetRevisionsComponent,
 ...
  ],
  imports: [
    SharedModule,
...
  ],
})
export class AssetsModule { }

AssetsModule imports SharedModule, which declares and exports the EnvironmentPermissionDirective as follows:


@NgModule({
  declarations: [
...
    EnvironmentPermissionDirective
  ],
  imports: [
...
  ],
  exports: [
...
    EnvironmentPermissionDirective
  ],
  providers: [
    DatePipe,
    DecimalPipe,
    CreateConfigSetRequestService,
    CreateMasterSetRequestService,
    ReplicateApiService,
    ModelPersistenceService,
    SchedulePersistenceService,
    CreateScheduleRequestService,
    CanDeactivateGuard,
  ],
})
export class SharedModule { }

What am I missing?

0

There are 0 best solutions below