The error "No provider for ComponentFactoryResolver$1!" in an Angular hybrid application (mixing AngularJS with Angular) typically occurs when you haven't properly configured the ComponentFactoryResolver in your hybrid module.

To fix this issue, you need to ensure that the ComponentFactoryResolver is provided in your hybrid module.

Here are the steps to resolve the error:

  1. Ensure that you have imported the UpgradeModule in your hybrid module file (e.g., app.module.ts).

  2. In your @NgModule decorator, make sure to include the providers array and add the ComponentFactoryResolver to it. You can use the downgradeComponent method from @angular/upgrade/static to downgrade your Angular components for use in AngularJS templates.

Here's an example of how your hybrid module may look:

import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { UpgradeModule } from '@angular/upgrade/static'; import { downgradeComponent } from '@angular/upgrade/static'; import { MyNg2Component } from './my-ng2.component'; @NgModule({ imports: [BrowserModule, UpgradeModule], declarations: [MyNg2Component], entryComponents: [MyNg2Component], providers: [ { provide: '$scope', useExisting: '$rootScope', }, // Make sure to include the ComponentFactoryResolver in providers { provide: 'ComponentFactoryResolver', useFactory: downgradeComponent, deps: ['$injector'], }, ], }) export class AppModule { constructor(private upgrade: UpgradeModule) {} ngDoBootstrap() { // Do any initialization needed for the hybrid app this.upgrade.bootstrap(document.body, ['app']); } }

Make sure to replace MyNg2Component with the name of your Angular component that you are downgrading.

By providing the ComponentFactoryResolver in the providers array with downgradeComponent, you should no longer encounter the "No provider for ComponentFactoryResolver$1!" error.

Additionally, if you are using the AngularJS injector ($injector) in your hybrid components, ensure that you have correctly imported and used it as needed. The $injector is essential for accessing AngularJS services in Angular components.

Note: The exact setup of your hybrid application might differ based on your project's structure and requirements. The provided example assumes a basic setup for a hybrid application using the UpgradeModule. Adjust the code accordingly if you have a more complex configuration.

Have questions or queries?
Get in Touch