diff options
Diffstat (limited to 'src/ng')
| -rw-r--r-- | src/ng/timeout.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/ng/timeout.js b/src/ng/timeout.js index a32538ee..08086c90 100644 --- a/src/ng/timeout.js +++ b/src/ng/timeout.js @@ -31,6 +31,94 @@ function $TimeoutProvider() { * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this * promise will be resolved with is the return value of the `fn` function. + * + * @example + <doc:example module="time"> + <doc:source> + <script> + function Ctrl2($scope,$timeout) { + $scope.format = 'M/d/yy h:mm:ss a'; + $scope.blood_1 = 100; + $scope.blood_2 = 120; + + var stop; + $scope.fight = function() { + stop = $timeout(function() { + if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { + $scope.blood_1 = $scope.blood_1 - 3; + $scope.blood_2 = $scope.blood_2 - 4; + $scope.fight(); + } else { + $timeout.cancel(stop); + } + }, 100); + }; + + $scope.stopFight = function() { + $timeout.cancel(stop); + }; + + $scope.resetFight = function() { + $scope.blood_1 = 100; + $scope.blood_2 = 120; + } + } + + angular.module('time', []) + // Register the 'myCurrentTime' directive factory method. + // We inject $timeout and dateFilter service since the factory method is DI. + .directive('myCurrentTime', function($timeout, dateFilter) { + // return the directive link function. (compile function not needed) + return function(scope, element, attrs) { + var format, // date format + timeoutId; // timeoutId, so that we can cancel the time updates + + // used to update the UI + function updateTime() { + element.text(dateFilter(new Date(), format)); + } + + // watch the expression, and update the UI on change. + scope.$watch(attrs.myCurrentTime, function(value) { + format = value; + updateTime(); + }); + + // schedule update in one second + function updateLater() { + // save the timeoutId for canceling + timeoutId = $timeout(function() { + updateTime(); // update DOM + updateLater(); // schedule another update + }, 1000); + } + + // listen on DOM destroy (removal) event, and cancel the next UI update + // to prevent updating time ofter the DOM element was removed. + element.bind('$destroy', function() { + $timeout.cancel(timeoutId); + }); + + updateLater(); // kick off the UI update process. + } + }); + </script> + + <div> + <div ng-controller="Ctrl2"> + Date format: <input ng-model="format"> <hr/> + Current time is: <span my-current-time="format"></span> + <hr/> + Blood 1 : <font color='red'>{{blood_1}}</font> + Blood 2 : <font color='red'>{{blood_2}}</font> + <button type="button" data-ng-click="fight()">Fight</button> + <button type="button" data-ng-click="stopFight()">StopFight</button> + <button type="button" data-ng-click="resetFight()">resetFight</button> + </div> + </div> + + </doc:source> + </doc:example> */ function timeout(fn, delay, invokeApply) { var deferred = $q.defer(), |
