(function() { var app = angular.module('mcbSpin', []) .directive('spinner', [Spinner]); function Spinner() { return { restrict: 'EA', //E = element, A = attribute, C = class, M = comment scope: { //@ reads the attribute value, = provides two-way binding, & works with functions show: '@', }, template: '<div id="spinnerModal" class="modal fade">' + '<div class="modal-dialog spinner">' + '<div class="modal-content">' + '<div class="modal-body">' + '<i class="fa fa-spinner fa-spin fa-5x"></i>' + '</div>' + '</div>' + '</div>' + '</div>', link: function(scope, element, attrs) { scope.$watch('show', function(n, o) { if (n === 'true') { $('#spinnerModal').modal('show'); console.log(o + '-->' + n); } else if(n === 'false') { $('#spinnerModal').modal('hide'); console.log(o + '-->' + n); } }, true); } //DOM manipulation }; } })();