【问题标题】:How to hide submenu on click outside of navigation bar如何在导航栏外单击时隐藏子菜单
【发布时间】:2015-04-02 16:25:17
【问题描述】:

我想写一个指令来分类导航栏。 https://jsfiddle.net/berber5/p03uhub8/

index.html:

<html lang="fr" ng-app="activity" id="ng-app">    
    <div  ng-controller="mainCtrl">
        <navigation-bar datas ="data"> </navigation-bar>
    </div>
</html>

我的指令:

app.directive('navigationBar', ['$window', function ($window) {

        return {
            restrict: 'EA',
            template: "<div id='navigation' class='navigation'>"+
                "<ul id='navidationUl' name='navigationName'> "+
                    "<li id='navLi' ng-repeat='(key, value) in datas'>"+
                        "<a  ng-href='{{value.route}}' ng-click='toggle($index)'> {{value.libelle}} "+
                            "<span ng-if='value.subMenu.length > 0' class='caret'></span>"+
                        "</a> "+
                        "<ul  id ='subMenu' ng-show ='value.showMe && value.subMenu.length > 0'>"+
                            "<li ng-repeat='(key2, value2) in value.subMenu'>"+
                                "<a ng-href='{{value2.route}}' ng-click ='dismissAll()'>{{value2.libelle}}</a>"+
                            "</li>"+
                        "</ul>"+

                    "</li> "+
                "</ul>"+
            "</div>",
            scope: {
                datas : "=datas"
            },
            link: function (scope, elem, attrs) {
                console.log("LINK : ", scope, elem, attrs);
                scope.dismissAll = function (){
                    for(var i = 0; i< scope.datas.length; i++) {
                        scope.datas[i].showMe = false;
                    }
                }
                scope.toggle = function toggle(index){
                    scope.datas[index].showMe = !scope.datas[index].showMe;
                    for(var i = 0; i< scope.datas.length; i++) {
                        if (i !=index) {
                            scope.datas[i].showMe = false;
                        }
                    }
                };
            }
        };
}]);

如果用户在导航栏外点击,我想知道如何隐藏子菜单

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您需要添加一个全局事件单击以隐藏所有菜单:

    app.directive('navigationBar', ['$window', '$document', function ($window, $document) {
    
        return {
            restrict: 'EA',
            template: "<div id='navigation' class='navigation'>"+
                "<ul id='navidationUl' name='navigationName'> "+
                    "<li id='navLi' ng-repeat='(key, value) in datas'>"+
                        "<a  ng-href='{{value.route}}' ng-click='toggle($index)'> {{value.libelle}} "+
                            "<span ng-if='value.subMenu.length > 0' class='caret'></span>"+
                        "</a> "+
                        "<ul  id ='subMenu' ng-show ='value.showMe && value.subMenu.length > 0'>"+
                            "<li ng-repeat='(key2, value2) in value.subMenu'>"+
                                "<a ng-href='{{value2.route}}' ng-click ='dismissAll()'>{{value2.libelle}}</a>"+
                            "</li>"+
                        "</ul>"+
    
                    "</li> "+
                "</ul>"+
            "</div>",
            scope: {
                datas : "=datas"
            },
            link: function (scope, elem, attrs) {
                scope.dismissAll = function (){
                    for(var i = 0; i< scope.datas.length; i++) {
                        scope.datas[i].showMe = false;
                    }
                }
                scope.toggle = function toggle(index){
                    scope.datas[index].showMe = !scope.datas[index].showMe;
                    for(var i = 0; i< scope.datas.length; i++) {
                        if (i !=index) {
                            scope.datas[i].showMe = false;
                        }
                    }
                };
    
                elem.bind('click', function(e) {
                    // this part keeps it from firing the click on the document.
                    e.stopPropagation();
                });
                $document.bind('click', function() {
                    scope.$apply(scope.dismissAll);
                })
            }
        };
    }]);
    

    更多信息在这里:Angular Click outside of an element event

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2014-11-08
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多