A directive called onClickOutside , it will trigger the expression when it clicks outside its nested elements.
Also, note that you can save features in your controller by directly changing vm.editableEnabled = true/false
Online Demo - http://plnkr.co/edit/5NlWD2bXFkGPXuj0Awav?p=preview

<div on-click-outside="vm.editableEnabled = false"> <div ng-hide="vm.editableEnabled" ng-click="vm.editableEnabled = true" ... > <md-autocomplete ng-show="vm.editableEnabled" ... > </div>
JavaScript:
.directive('onClickOutside', function($timeout) { return { restrict: 'A', scope: { onClickOutside: "&" }, link: function(scope, element, attr) { angular.element(document).bind('click', function(event) { var isChild = childOf(event.target, element[0]); if (!isChild) { scope.$apply(scope.onClickOutside); } }); function childOf(c, p) { while ((c = c.parentNode) && c !== p); return !!c; } } }; });
source share