在移动模式下折叠导航栏(链接点击)

时间:2013-08-19 22:30:38

标签: twitter-bootstrap angularjs

我正在使用带有角度的bootstrap 3。单击链接时,页面不会重新加载,导致菜单在移动模式下保持打开状态。

单击菜单项时如何自动关闭菜单?

我尝试将data-toggle="collapse" data-target=".navbar-responsive-collapse"添加到a标记,但它会在桌面模式下导致奇怪的行为。

5 个答案:

答案 0 :(得分:7)

这只是之前回答的更新版本

angular.module('app').directive('navCollapse', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            var visible = false;

            element.on('show.bs.collapse', function () {
                visible = true;
            });

            element.on("hide.bs.collapse", function () {
                visible = false;
            });

            element.on('click', function(event) {
                if (visible && 'auto' == element.css('overflow-y')) {
                    element.collapse('hide');
                }
            });
        }
    };
});

HTML

    <div class="collapse navbar-collapse navbar-app-collapse" nav-collapse="">
        <ul class="nav navbar-nav">

        </ul>
    </div>

答案 1 :(得分:4)

这是我最终使用的角度指令。 有几件事需要注意。

  • 在桌面模式下(查找overflow-y == auto)
  • 时不要折叠菜单
  • 使用打开的菜单调整窗口大小时处理菜单状态,该菜单在窗口增长时关闭。

我在带有nav类的元素上使用了ic-nav-autoclose指令。


angular.module('incmn')
    .directive('icNavAutoclose', function () {
        console.log("icNavAutoclose");
        return function (scope, elm, attrs) {
            var collapsible = $(elm).find(".navbar-collapse");
            var visible = false;

            collapsible.on("show.bs.collapse", function () {
                visible = true;
            });

            collapsible.on("hide.bs.collapse", function () {
                visible = false;
            });

            $(elm).find("a").each(function (index, element) {
                $(element).click(function (e) {
                    if (visible && "auto" == collapsible.css("overflow-y")) {
                        collapsible.collapse("hide");
                    }
                });
            });
        }
    });

答案 2 :(得分:2)

我这样做了。

$(selector).click(function () {
  //for close, opened dropdown.
  if ($("nav").hasClass("in")) {
    $('[data-toggle="collapse"]').click();
  }
});

答案 3 :(得分:1)

如果您希望导航栏在下次点击后折叠,无论它出现在屏幕上的哪个位置:

  1. 让您的.navbar-toggle按钮仅打开导航:

    <div class="navbar-header">
        <button class="navbar-toggle" ng-click="collapsed = true">
    </div>
    
  2. 使用不可见的全屏参考地址附加.navbar-collapse,点击后会关闭导航:

    .invisible-underlay {
        position: fixed;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        background-color: transparent;
    }
    
    <div class="navbar-collapse" collapse="navbarCollapsed" ng-click="navbarCollapsed = true">
        <div class="invisible-underlay"></div>
        <ul class="nav navbar-nav navbar-right">
            <li><a ui-sref="home">Home</a></li>
        </ul>
    </div>
    

答案 4 :(得分:0)

此代码适用于导航栏中的下拉子菜单

angular.module('app').directive('navCollapse', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            var visible = false;

            element.on('show.bs.collapse', function () {
                visible = true;
            });

            element.on("hide.bs.collapse", function () {
                visible = false;
            });

            element.on('click', function (event) {
                if (visible && 'auto' == element.css('overflow-y') && $(event.target).attr('data-toggle')!="dropdown") {
                    element.collapse('hide');
                }
            });
        }
    };
});