I wrote an AngularJS directive, but I'm pretty new about it, and I don't know if I done in the "Angular way"...
Here is my plunker with the code: http://plnkr.co/edit/X1tOk4z8f6dCK3mfB7HP?p=preview
html:
<!DOCTYPE html> <html ng-app="app"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> <meta charset=utf-8 /> <title>Directive Test</title> <script src="script.js"></script> </head> <body ng-controller="MainCtrl"> <button id="button1" ng-click="dummyClickFoo()" wait-button="foo"><i></i> Foo</button> <button id="button2" ng-click="dummyClickBar()" wait-button="bar"><i></i> Bar</button> </body> </html> js:
app = angular.module('app', []); app.controller('MainCtrl', function($scope) { $scope.dummyClickFoo = function() { $scope.startSpinner('foo'); setTimeout(function() { $scope.stopSpinner('foo'); }, 3000); }; $scope.dummyClickBar = function() { $scope.startSpinner('bar'); setTimeout(function() { $scope.stopSpinner('bar'); }, 3000); }; }); app.directive('waitButton', function() { return { restrict: 'A', controller: ['$scope', '$element', function($scope, $element) { $scope.startSpinner = function(id) { var el = angular.element(document.querySelector('[wait-button="'+id+'"]')); el.children('i').text('searching...'); }; $scope.stopSpinner = function(id) { var el = angular.element(document.querySelector('[wait-button="'+id+'"]')); el.children('i').empty(); }; }] }; }); I find that the document.querySelector('[wait-button="'+id+'"]') part, it's a bit "nasty"... (or not?); otherwise I don't know a better way to re-use the same directive different times in the same controller. Can someone suggest me a better code?
Thank you.