Search code examples
angularng-bootstrapangular9angular-ivy

R3InjectorError No provider for NgbDropdown


I have a shared module A where I import and export NgbDropdownModule

import { ... NgbDatepickerModule, NgbDropdownModule, NgbModalModule ...} from '@ng-bootstrap/ng-bootstrap';

imports: [...NgbDropdownModule...]

exports: [...NgbDropdownModule...]

In module B I just import module A and up to Angular 9 everything worked fine. I used components from A, but also ngbDropdown directly.

After upgrading to Angular 9, I receive following error when module B is lazy loaded:

ERROR NullInjectorError: R3InjectorError(BModule)[NgbDropdown -> NgbDropdown -> NgbDropdown -> NgbDropdown]: NullInjectorError: No provider for NgbDropdown! at NullInjector.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.NullInjector.get (http://localhost:51000/vendor.js:60672:25) at R3Injector.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.R3Injector.get (http://localhost:51000/vendor.js:71020:33) at R3Injector.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.R3Injector.get (http://localhost:51000/vendor.js:71020:33) at R3Injector.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.R3Injector.get (http://localhost:51000/vendor.js:71020:33) at NgModuleRef$1.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.NgModuleRef$1.get (http://localhost:51000/vendor.js:84306:33) at R3Injector.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.R3Injector.get (http://localhost:51000/vendor.js:71020:33) at NgModuleRef$1.push../node_modules/@angular/core/ivy_ngcc/fesm5/core.js.NgModuleRef$1.get (http://localhost:51000/vendor.js:84306:33) at Object.get (http://localhost:51000/vendor.js:82620:35) at getOrCreateInjectable (http://localhost:51000/vendor.js:63536:39) at Module.ɵɵdirectiveInject (http://localhost:51000/vendor.js:73885:12)

What am I doing wrong?


Solution

  • Turns out, someone put Dropdown instead of ngbDropdown in one of the components.

    Like I saw on some other posts, this problem usually exists if hierarchy of ngbDropdown->ngbDropdownToggle->ngbDropdownMenu is not respected.