<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Example - example-example14-production</title>
<link data-require="bootstrap@*" data-semver="3.3.2" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
<script data-require="bootstrap@*" data-semver="3.3.2" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script data-require="jquery@*" data-semver="2.1.3" src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0-rc.0/angular.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body ng-app="docsRestrictDirective">
<div ng-controller="Controller" class="row">
<div class="col-xs-8 col-xs-offset-2 text-center">
<h1>Closing dropdowns</h1>
<p class="lead">How to close dropdowns by clicking outside the dropdown.</p>
<user-dropdown class="col-xs-6"></user-dropdown>
<project-dropdown class="col-xs-6"></project-dropdown>
</div>
</div>
</body>
</html>
(function(angular) {
'use strict';
angular.module('docsRestrictDirective', [])
.controller('Controller', ['$scope', function($scope) {
}])
.directive('userDropdown', ['$document', function($document) {
return {
restrict: 'E',
templateUrl: 'user-dropdown.html',
link: function(scope, element, attr) {
scope.isUserDropdownVisible = false;
scope.toggleUserDropdown = function(){
console.log("Users");
scope.isUserDropdownVisible = !scope.isUserDropdownVisible;
}
$document.bind('click', function(event){
var isClickedElementChildOfPopup = element
.find(event.target)
.length > 0;
if (isClickedElementChildOfPopup)
return;
scope.isUserDropdownVisible = false;
scope.$apply();
});
}
};
}])
.directive('projectDropdown', ['$document', function($document) {
return {
restrict: 'E',
templateUrl: 'project-dropdown.html',
link: function(scope, element, attr) {
scope.isProjectDropdownVisible = false;
scope.toggleProjectDropdown = function(){
console.log("Projects");
scope.isProjectDropdownVisible = !scope.isProjectDropdownVisible;
}
$document.bind('click', function(event){
var isClickedElementChildOfPopup = element
.find(event.target)
.length > 0;
if (isClickedElementChildOfPopup)
return;
scope.isProjectDropdownVisible = false;
scope.$apply();
});
}
};
}]);
})(window.angular);
<ul class="list-inline">
<li class="user-dropdown fancy-dropdown" ng-class="{open:isUserDropdownVisible}">
<button class="btn btn-primary btn-lg btn-block" ng-click="toggleUserDropdown()">User <small>({{ isUserDropdownVisible }})</small></button>
<ul class="list-group menu">
<li class="list-group-item"><a href="#">Profile</a></li>
<li class="list-group-item"><a href="#">Alerts</a></li>
<li class="list-group-item"><a href="#">Logout</a></li>
</ul>
</li>
</ul>
<ul class="list-inline">
<li class="project-dropdown fancy-dropdown" ng-class="{open:isProjectDropdownVisible}">
<button class="btn btn-default btn-lg btn-block" ng-click="toggleProjectDropdown()">My Projects <small>({{ isProjectDropdownVisible }})</small></button>
<ul class="list-group menu">
<li class="list-group-item"><a href="#">Project name 1</a></li>
<li class="list-group-item"><a href="#">Project name 2</a></li>
<li class="list-group-item"><a href="#">Project name 3</a></li>
</ul>
</li>
</ul>
.list-inline {
width: 180px;
}
.list-inline>li { width: 100%; }
.fancy-dropdown .menu {
display: none;
}
.fancy-dropdown.open .menu, .fancy-dropdown:hover .menu {
display: block;
}