Leave a Comment
Директивы для Angular.js
Писать свои директивы для angular.js просто, а использовать их потом — удобно.
Вот к примеру, нет у angular по умолчанию обработчика увода фокуса с элемента. Написать соответствующую директиву очень просто:
1 2 3 4 5 6 7 8 9 10 11 |
angular.module('buExtra', []). directive('ngBlur', function() { return { restrict: 'A', link: function postLink(scope, element, attrs) { element.bind('blur', function () { scope.$apply(attrs.ngBlur); }); } }; }); |
Использовать её надо вот так:
1 |
<input ng-model="set.weight" ng-blur="setWeightBlured(set)" /> |
В контроллере:
1 2 3 |
$scope.setWeightBlured = function (setData) { console.log(setData.id); }; |
Почитать про ngBlur — https://github.com/angular/angular.js/issues/1277.
Примеры директив — http://habrahabr.ru/post/164493/.
UPDATE:
Правильно писать директивы лучше так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
angular.module('buExtra', []). directive('ngTouchstart', ['$parse', function($parse) { return { restrict: 'A', link: function link($scope, $element, attrs) { var fn = $parse(attrs.ngTouchstart); $element.bind('ngTouchstart', function ($event) { $scope.$apply(function () { fn($scope, {$event: $event}); }); }); } }; }]); |
А для touch-событий — вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var directives = angular.module('buExtra', []); angular.forEach(['Touchstart', 'Touchend'], function (eName) { var aName = 'ng' + eName, eName = eName.toLowerCase(); directives. directive(aName, ['$parse', function($parse) { return { restrict: 'A', link: function link($scope, $element, attrs) { var fn = $parse(attrs[aName]); $element.bind(eName, function ($event) { $scope.$apply(function () { fn($scope, {$event: $event}); }); }); } }; }]); }); |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.