You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
1.1 KiB
JavaScript
28 lines
1.1 KiB
JavaScript
/**
|
|
* General-purpose Event binding. Bind any event not natively supported by Angular
|
|
* Pass an object with keynames for events to ui-event
|
|
* Allows $event object and $params object to be passed
|
|
*
|
|
* @example <input ui-event="{ focus : 'counter++', blur : 'someCallback()' }">
|
|
* @example <input ui-event="{ myCustomEvent : 'myEventHandler($event, $params)'}">
|
|
*
|
|
* @param ui-event {string|object literal} The event to bind to as a string or a hash of events with their callbacks
|
|
*/
|
|
angular.module('ui.directives').directive('uiEvent', ['$parse',
|
|
function ($parse) {
|
|
return function (scope, elm, attrs) {
|
|
var events = scope.$eval(attrs.uiEvent);
|
|
angular.forEach(events, function (uiEvent, eventName) {
|
|
var fn = $parse(uiEvent);
|
|
elm.bind(eventName, function (evt) {
|
|
var params = Array.prototype.slice.call(arguments);
|
|
//Take out first paramater (event object);
|
|
params = params.splice(1);
|
|
scope.$apply(function () {
|
|
fn(scope, {$event: evt, $params: params});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
}]);
|