diff options
| author | Uri Goldshtein | 2013-09-27 17:28:41 +0200 | 
|---|---|---|
| committer | Pete Bacon Darwin | 2013-09-28 15:24:35 +0100 | 
| commit | e2efa230153a416953eebff4b63d86fcbb28d063 (patch) | |
| tree | 332def5eda0d6c11822b902ec1727d0200ca4639 /src | |
| parent | 4f845437a85aa8ab417aff8212feac216955cc93 (diff) | |
| download | angular.js-e2efa230153a416953eebff4b63d86fcbb28d063.tar.bz2 | |
docs($timeout): add a $timeout example
The original example is by gxlcl.
Closes #4180
Diffstat (limited to 'src')
| -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(), | 
