Responsive dropdown navbar with angular-ui bootstrap (done in the correct angular kind of way)

后端 未结 4 1712
感动是毒
感动是毒 2020-12-04 05:24

I\'ve created a JSFiddle with a dropdown navbar using angular-ui-boostrap\'s module \"ui.bootstrap.dropdownToggle\": http://jsfiddle.net/mhu23/2pmz5/

<
相关标签:
4条回答
  • 2020-12-04 06:03

    Update 2015-06

    Based on antoinepairet's comment/example:

    Using uib-collapse attribute provides animations: http://plnkr.co/edit/omyoOxYnCdWJP8ANmTc6?p=preview

    <nav class="navbar navbar-default" role="navigation">
        <div class="navbar-header">
    
            <!-- note the ng-init and ng-click here: -->
            <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Brand</a>
        </div>
    
        <div class="collapse navbar-collapse" uib-collapse="navCollapsed">
            <ul class="nav navbar-nav">
            ...
            </ul>
        </div>
    </nav>
    

    Ancient..

    I see that the question is framed around BS2, but I thought I'd pitch in with a solution for Bootstrap 3 using ng-class solution based on suggestions in ui.bootstrap issue 394:

    The only variation from the official bootstrap example is the addition of ng- attributes noted by comments, below:

    <nav class="navbar navbar-default" role="navigation">
      <div class="navbar-header">
    
        <!-- note the ng-init and ng-click here: -->
        <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="#">Brand</a>
      </div>
    
      <!-- note the ng-class here -->
      <div class="collapse navbar-collapse" ng-class="{'in':!navCollapsed}">
    
        <ul class="nav navbar-nav">
        ...
    

    Here is an updated working example: http://plnkr.co/edit/OlCCnbGlYWeO7Nxwfj5G?p=preview (hat tip Lars)

    This seems to works for me in simple use cases, but you'll note in the example that the second dropdown is cut off… good luck!

    0 讨论(0)
  • 2020-12-04 06:15

    You can do it using the "collapse" directive: http://jsfiddle.net/iscrow/Es4L3/ (check the two "Note" in the HTML).

            <!-- Note: set the initial collapsed state and change it when clicking -->
            <a ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed" class="btn btn-navbar">
               <span class="icon-bar"></span>
               <span class="icon-bar"></span>
               <span class="icon-bar"></span>
            </a>
            <a class="brand" href="#">Title</a>
               <!-- Note: use "collapse" here. The original "data-" settings are not needed anymore. -->
               <div collapse="navCollapsed" class="nav-collapse collapse navbar-responsive-collapse">
                  <ul class="nav">
    

    That is, you need to store the collapsed state in a variable, and changing the collapsed also by (simply) changing the value of that variable.


    Release 0.14 added a uib- prefix to components:

    https://github.com/angular-ui/bootstrap/wiki/Migration-guide-for-prefixes

    Change: collapse to uib-collapse.

    0 讨论(0)
  • 2020-12-04 06:15

    My solotion for responsive/dropdown navbar with angular-ui bootstrap (when update to angular 1.5 and, ui-bootrap 1.2.1)
    index.html

         ...    
        <link rel="stylesheet" href="/css/app.css">
    </head>
    <body>
    
    
    <nav class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <input type="checkbox" id="navbar-toggle-cbox">
                <div class="navbar-header">
                    <label for="navbar-toggle-cbox" class="navbar-toggle" 
                           ng-init="navCollapsed = true" 
                           ng-click="navCollapsed = !navCollapsed"  
                           aria-controls="navbar">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </label>
                    <a class="navbar-brand" href="#">Project name</a>
                     <div id="navbar" class="collapse navbar-collapse"  ng-class="{'in':!navCollapsed}">
                        <ul class="nav navbar-nav">
                            <li class="active"><a href="/view1">Home</a></li>
                            <li><a href="/view2">About</a></li>
                            <li><a href="#">Contact</a></li>
                            <li uib-dropdown>
                                <a href="#" uib-dropdown-toggle>Dropdown <b class="caret"></b></a>
                                <ul uib-dropdown-menu role="menu" aria-labelledby="split-button">
                                    <li role="menuitem"><a href="#">Action</a></li>
                                    <li role="menuitem"><a href="#">Another action</a></li>                                   
                                </ul>
                            </li>
    
                        </ul>
                     </div>
                </div>
            </div>
        </nav>
    

    app.css

    /* show the collapse when navbar toggle is checked */
    #navbar-toggle-cbox:checked ~ .collapse {
        display: block;
    }
    
    /* the checkbox used only internally; don't display it */
    #navbar-toggle-cbox {
      display:none
    }
    
    0 讨论(0)
  • 2020-12-04 06:17

    Not sure if anyone is having the same responsive issue, but it was just a simple css solution for me.

    same example

    ...  ng-init="isCollapsed = true" ng-click="isCollapsed = !isCollapsed"> ...
    ...  div collapse="isCollapsed"> ...
    

    with

    @media screen and (min-width: 768px) {
        .collapse{
            display: block !important;
        }
    }
    
    0 讨论(0)
提交回复
热议问题