window.angular && (function(angular) { 'use strict'; angular.module('app.common.directives') .directive('clickOutside', function($document) { return { restrict: 'A', scope: {clickOutside: '&'}, link: function(scope, el, attr) { function clickEvent(e) { if (el !== e.target && !el[0].contains(e.target)) { scope.$apply(function() { scope.$eval(scope.clickOutside); }); } } $document.bind('click', clickEvent); scope.$on('$destroy', function() { $document.unbind('click', clickEvent); }); } } }); })(window.angular);