Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://rawgit.com/angular/bower-angular/master/angular.js"></script>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Timer on angular</title>
</head>
<body>
</body>
</html>
 
//main.js
angular.module("myApp", []);
//app.component.js
angular.module("myApp").component("body", {
    controller: MyAppComponent,
    template: '<a href="javascript:void(0)" ng-click="$ctrl.OnStart()">start</a><br /><a href="javascript:void(0)" ng-click="$ctrl.OnStop()">stop</a><my-timer start="$ctrl.start"></my-timer>'
});
function MyAppComponent() {
    this.start = false;
    this.OnStart = function () {
        this.start = true;
    };
    this.OnStop = function () {
        this.start = false;
    };
}
//timer.component.js
angular.module("myApp").component("myTimer", {
    controller: MyTimerComponent,
    bindings: { start: "<" },
    template: "<div>{{$ctrl.time}}</div>"
});
function MyTimerComponent($timeout) {
    var _start, _cancel, _time = 0;
    function OnTime() {
        _cancel = $timeout(OnTime, 1000);
        _time++;
    }
    function Start() {
        if (_start) return;
        _start = true;
        _cancel = $timeout(OnTime, 1000);
    }
    function Stop() {
        if (_start) {
            $timeout.cancel(_cancel);
            _time = 0;
            _start = false;
        }
    }
    Object.defineProperty(this, "start", {
        get: function () {
            return _start;
        },
        set: function (value) {
            if (_start != value) {
                if (value)
                    Start();
                else
                    Stop();
            }
        }
    });
    Object.defineProperty(this, "time", {
        get: function () {
            return _time;
        }
    });
    this.$onDestroy = Stop;
}
Output

This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers