aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUri Goldshtein2013-09-27 17:28:41 +0200
committerPete Bacon Darwin2013-09-28 15:24:35 +0100
commite2efa230153a416953eebff4b63d86fcbb28d063 (patch)
tree332def5eda0d6c11822b902ec1727d0200ca4639 /src
parent4f845437a85aa8ab417aff8212feac216955cc93 (diff)
downloadangular.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.js88
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(),