No provider for NgbDropdown with Angular Bootstrap

11,880

Solution 1

Make sure your HTML markup has the ngbDropdown attribute on ngbDropdownToggle and ngbDropdownMenu parent.

<div ngbDropdown> <!-- **here** -->
  <button class="btn btn-outline-primary" 
      id="dropdownBasic1" ngbDropdownToggle>Toggle dropdown</button>
  <div ngbDropdownMenu>
    <button ngbDropdownItem>Action - 1</button>
    <button ngbDropdownItem>Another Action</button>
    <button ngbDropdownItem>Something else is here</button>
  </div>
</div>

Solution 2

As provided by @robert, with the official example, the issue is that the pulldown menu html must not be directly in the app.component.html. If placed there, the stated error appears.

I am not sure if placing the pulldown menu html in its own component is the only solution, but it is the difference between working and not working for my situation. I was unable to place the content found in the dropdown-basic.html into the app.component.html without encountering the issue.

I would suggest to the authors of angular bootstrap that the required usage be placed directly in the documentation. As it is now, it is not explicit. The official example simply appears as one way to use the code.

Share:
11,880

Related videos on Youtube

Jason K.
Author by

Jason K.

I am full range senior technologist with skills ranging from low level hardware development to telecommunications to big data analysis and machine learning. I have driven software and hardware products from the concept stage through to certification, trials, deployment and ongoing maintenance. Envisioning meaningful solutions that make things better and driving them to fruition is what drives me.

Updated on January 10, 2020

Comments

  • Jason K.
    Jason K. over 4 years

    I am attempting to use the NbgDropdown in an app and I get the following error:

    NullInjectorError: No provider for NgbDropdown!

    My app.module file looks as follows:

    import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
    ...
    
    NgModule({
        declarations: [
            ...
        ],
        imports: [
            ...
            NgbModule.forRoot()
        ],
        providers: [
            ...
        ],
        bootstrap: [AppComponent]
    })
    

    From other answers, this looks like what should be required

    I saw the following terse comment that might help, but it is not meaningful to me:

    https://stackoverflow.com/a/46636887/2178363

    • robert
      robert about 5 years
    • Jason K.
      Jason K. about 5 years
      So, is the trick that the menu needs to be its own component? I am attempting to put the code in app.component.html and then hit the problem.
    • Suresh Kumar Ariya
      Suresh Kumar Ariya about 5 years
      try clearing 'npm cache clean --force' then delete 'package.lock' and do 'npm install'
    • Suresh Kumar Ariya
      Suresh Kumar Ariya about 5 years
      Try moving dropdown code to another component and try
    • Jason K.
      Jason K. about 5 years
      Thanks for the help, the issue is described in my answer.
  • Bilal
    Bilal about 2 years
    YES, we cannot have ngbDropdownMenu or ngbDropdownToggle component without a parent ngbDropdown component. github.com/ng-bootstrap/ng-bootstrap/issues/…