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?
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.