1

I want to use a javascript setTimeout with AngularJS, that count value increases after every second:

<!DOCTYPE html>
<html>
    <head>
        <title>MyCount</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript" src="js/angular.min.js"></script>
        <script type="text/javascript">

How to write correctly

    function myController($scope) {
        $scope.count = 1;
        $scope.delayInc = function () {
            $timeout(function () {
                $scope.count += 1;
            }, 1000);
        };
    }
</script>

That the count does not stay to 1?

        <h2>My Second Count: {{count}}</h2>
    </body>
</html>

Thank you

0

2 Answers 2

2

$interval is more relevant for this:

<!doctype html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
    </head>
    <body ng-app="plunker" ng-controller="MainCtrl">
        {{iterator}}
    </body>
    <script>
        var app = angular.module('plunker', []);

        app.controller('MainCtrl', ['$scope', '$interval', function($scope, $interval) {
            $scope.iterator = 1;
            var interval = $interval(function() {
                $scope.iterator++;
                if ($scope.iterator > 10) {
                    $interval.cancel(interval);
                }
            }, 1000);
        }]);
    </script>
</html>

Sign up to request clarification or add additional context in comments.

Comments

1

Couple of issues with your code. First, you are defining the delayInc() function, but you are never calling it. So, no $timeout is ever scheduled. This needs to either be called in the controller, or you need to have it be initiated from some event (ng-click for example on a button).

Second, from your description, it sounds like you want it to increment every second. Using $timeout would only increment it once -- one second after delayInc() was called.

Take a look at the following approach, showing both $timeout working as well as using $interval to have it ongoing every second:

<body ng-controller="MainCtrl">
  <p>Count (timeout): {{count}}!</p>
  <button ng-click="delayInc()">Start Delay Timer</button>
  <p></p>
  <p>Count2 (interval): {{count2}}!</p>
  <button ng-click="repeatInc()">Start Interval Counter</button>
</body>


app.controller('MainCtrl', function($scope, $timeout, $interval) {
  $scope.count = 1;
  $scope.count2 = 1;
  $scope.delayInc = function() {
    $timeout(function() {
      $scope.count += 1;
    }, 1000);
  };
  $scope.repeatInc = function() {
    $interval(function() {
      $scope.count2 += 1;
    }, 1000);
  }

Here is the Plunker with all of it working: http://plnkr.co/edit/c0EFB7Lbs6ZjJL5NQf86?p=preview

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.