Binds keys to the lifecycle of the scope.
<key-binding
combo=""
handler="">
...
</key-binding>
Param | Type | Details |
---|---|---|
combo | string |
A key combo that will be passed to Mousetrap. List of supported keys |
handler | expression |
Expression that will be evaluated as event handler. Available expression locals:
|
Using the n
key globally in the app to create a new document, unless the currently focused element
is editable (e.g., input, select)
<div ng-controller="AppCtrl as app">
<key-binding combo="n" handler="app.createNewDocument()"></key-binding>
<div class="form-group">
<input class="form-control" type="text">
</div>
<div class="form-group">
<textarea class="form-control"></textarea>
</div>
</div>
angular.module('app', [
'voorhoede.components.keyBindings'
])
.controller('AppCtrl', function() {
this.createNewDocument = function() {
alert('Create new document');
};
});
Using esc
to close nested dropdown components, one at a time.
<dropdown-button label="Dropdown 1">
<ul class="dropdown-menu">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li>
<dropdown-button label="Dropdown 2">
<ul class="dropdown-menu">
<li><a href="">Item 3</a></li>
<li><a href="">Item 4</a></li>
<li>
<dropdown-button label="Dropdown 3">
<ul class="dropdown-menu">
<li><a href="">Item 5</a></li>
<li><a href="">Item 6</a></li>
</ul>
</dropdown-button>
</li>
</ul>
</dropdown-button>
</li>
</ul>
</dropdown-button>
angular.module('app', [
'components.dropdownButton'
]);
<div class="dropdown">
<button class="btn btn-default" ng-click="controller.toggle()">
{{ label }}
<span class="caret"></span>
</button>
<div ng-if="controller.isOpen">
<key-binding combo="esc" handler="controller.toggle()"></key-binding>
</div>
<div ng-transclude ng-if="controller.isOpen" class="open"></div>
</div>
angular.module('components.dropdownButton', [
'voorhoede.components.keyBindings'
])
.directive('dropdownButton', function() {
return {
restrict: 'E',
scope: {'label': '@'},
transclude: true,
templateUrl: 'dropdownButton.html',
controllerAs: 'controller',
controller: function() {
this.isOpen = false;
this.toggle = function() {
this.isOpen = !this.isOpen;
};
}
};
});