function MainController($timeout) {
var vm = this;
this.progress = 0;
this.width = "0";
//simulate progress
var doProgress = $timeout(onTimeout,250);
function onTimeout() {
vm.progress++;
if(vm.progress > 100)
vm.progress = 0;
mytimeout = $timeout(onTimeout,250);
vm.width = vm.progress + '%';
}
}
var progressBar = {
bindings: {
width: '<'
},
template: `<div class="meter">
<span ng-style="{ 'width' : $ctrl.width }"></span>
</div>`
}
angular.module('plunker', []);
angular.module('plunker')
.controller('MainController', MainController)
.component('progressBar', progressBar);
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.5.x" src="https://code.angularjs.org/1.5.8/angular.js" data-semver="1.5.8"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainController as ctrl">
<progress-bar width="ctrl.width"></progress-bar>
</body>
</html>
.meter {
height: 20px; /* Can be anything */
position: relative;
background: #555;
-moz-border-radius: 25px;
-webkit-border-radius: 25px;
border-radius: 25px;
padding: 10px;
box-shadow: inset 0 -1px 1px rgba(255,255,255,0.3);
}
.meter > span {
display: block;
height: 100%;
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
background-color: rgb(43,194,83);
background-image: linear-gradient(
center bottom,
rgb(43,194,83) 37%,
rgb(84,240,84) 69%
);
box-shadow:
inset 0 2px 9px rgba(255,255,255,0.3),
inset 0 -2px 6px rgba(0,0,0,0.4);
position: relative;
overflow: hidden;
}