Javascript 计时器绑定不工作
我已经创建了一个秒表工厂服务,除了运行(重置和其他未实现的功能,只需忽略它们)之外,实际上没有做很多事情 我设置了一个Javascript 计时器绑定不工作,javascript,angularjs,binding,ionic-framework,ionic,Javascript,Angularjs,Binding,Ionic Framework,Ionic,我已经创建了一个秒表工厂服务,除了运行(重置和其他未实现的功能,只需忽略它们)之外,实际上没有做很多事情 我设置了一个$scope.time来接收计时器的更改,但是它没有被更新 我尝试过很多不同的方法,我想最后一种方法是非常糟糕的做法,但我想尝试并使其发挥作用 我的看法是: <ion-view view-title="Clock"> <ion-content> <div ng-controller="controller as ClockCtrl">
$scope.time
来接收计时器的更改,但是它没有被更新
我尝试过很多不同的方法,我想最后一种方法是非常糟糕的做法,但我想尝试并使其发挥作用
我的看法是:
<ion-view view-title="Clock">
<ion-content>
<div ng-controller="controller as ClockCtrl">
<h1 ng-bind="ClockCtrl.time"></h1>
</div>
</ion-content>
</ion-view>
我的服务:
factory('Stopwatch', function() {
var Stopwatch = (function() {
var s;
var isRunning = 0;
var time = 0;
var thatElement;
function run(element){
if(isRunning !== 0){
time++;
s.mills = time % 10;
s.secs = Math.floor(time / 10);
s.mins = Math.floor(time / 10 / 60);
//Stopwatch.currentTime = ("0"+s.mins).slice(-2)+":"+("0"+s.secs).slice(-2)+":"+("0"+s.mills).slice(-2);
thatElement.time = ("0"+s.mins).slice(-2)+":"+("0"+s.secs).slice(-2)+":"+("0"+s.mills).slice(-2);
setTimeout(run, 100);
}
};
return {
settings: {
currTime: "",
mills: 0,
secs: 0,
mins: 0,
i: 1,
times: ["00:00:00"],
},
currentTime: "",
init: function(element) {
thatElement = element;
s = this.settings;
this.start(element);
},
clear: function() {
s.i = 1,
s.mins = s.secs = s.mills = 0;
s.times = ["00:00:00"],
s.results.innerHTML = s.clearButton;
},
start:function(element){
isRunning = 1;
run(element);
},
stop: function(){
isRunning = 0;
}
}
})();
return Stopwatch;
})
我知道最后一种方法不好,我会接受任何指针,这是我第一次使用离子,第二次尝试角度
提前谢谢 由于您使用的是
controllerAs
语法,因此需要设置控制器实例属性,而不是$scope
对象一:
.controller('ClockCtrl', function($scope, Stopwatch) {
this.time = "";
Stopwatch.init(this);
});
由于您使用的是
controllerAs
语法,因此需要设置控制器实例属性,而不是$scope
对象一:
.controller('ClockCtrl', function($scope, Stopwatch) {
this.time = "";
Stopwatch.init(this);
});
您应该使用自定义的时间格式过滤器。下面是一个很好的例子,用$timeout和$interval进行了解释。加上定制的过滤器。运行代码段,看看它是如何工作的,感谢您的精彩引用,但是在该示例中,代码位于控制器内部,我希望它从工厂获取。您应该使用自定义的时间格式过滤器。下面是一个很好的例子,用$timeout和$interval进行了解释。加上定制的过滤器。运行代码段并查看它是如何工作的,感谢您的精彩引用,但是在该示例中,代码位于控制器内部,我希望它从工厂提取。不幸的是,更改代码并没有改变结果。还有其他想法吗?调试时,我看到vm.time正在更改,但绑定没有更改(与以前相同)。您还需要将
this
而不是$scope
传递到Stopwatch.init
。是的,我在看到您的代码时也尝试过。不幸的是,更改代码并没有改变结果。还有其他想法吗?调试时,我看到vm.time正在更改,但绑定没有更改(与以前相同)。您还需要将this
而不是$scope
传递到Stopwatch.init
。是的,我在看到您的代码时也尝试过。运气不好:-\