这里的任务很简单,但不清楚这个错误。AngularJS在控制器之间共享数据使用服务并观看更新
我的服务:
app.factory('Progress', function() {
var data = {
progressPercentageLoaded: 0
};
return {
getProgress: function() {
return data.progressPercentageLoaded;
},
setProgress: function (progress) {
data.progressPercentageLoaded = progress;
}
};
});
我有一个控制器是上传文件,这个设置进度值。
//in my controller
$scope.progressPercentageLoaded = {progress:0};
//a few lines down
function (evt) {
console.log(evt);
$scope.progressPercentageLoaded.progress = evt.loaded;
Progress.setProgress($scope.progressPercentageLoaded.progress);
我的第二个控制器应该简单地监视更改的服务和更新的观点,但它保持停留在零即使我确认上传正在发生的事情,并且evt.loaded
正在发生变化。
$scope.progress = 0;
$scope.$watch(function() { return Progress.getProgress(); }, function (newValue, oldValue) {
if (newValue !== oldValue) {
$scope.progress = Math.min(100, parseInt(100 * newValue/$scope.size));
if($scope.progress == 100)
{
$scope.progressModalInstance.close();
window.location.reload();
}
}
});
即,在$scope.progress
第二控制器应与evt.loaded
在第一控制器的值更新,但它没有。
在此先感谢您的任何指导。
编辑:我甚至增加了第三watch
参数作为true
但这并没有帮助。
编辑2:以上实际代码工作,据我所知,我相信别的东西是导致一个问题,当我恢复的代码上面的编辑它由于答案后,它突然像它应该那样工作。为此事道歉。使用$ rootScope。$广播将努力为这个
app.factory( '进步',功能较好
您是否在控制台中看到任何错误?这些控制器是否相互继承?我用2个控制器创建了一个简单的例子,并且我看到观察者正在执行。但不是上传文件,我每2秒调用一次'setProgress':'var p = 0; setInterval(function(){$ scope。$ apply(function(){Progress.setProgress(++ p);});},2000);'这是否适合您? –
@FrankModica上面的代码实际上工作,我不知道为什么它以前没有工作,但我只是恢复到上述,它的功能很好。我看到上传事件被记录,但上传百分比没有变化,可能上传太大了,即使上传的内容更多,它也没有变化?我不确定,但是我刚刚尝试了一些小文件,并且视图已经适当更新,没有对上述代码进行任何更改,很抱歉浪费您的时间! :( –
没问题,很高兴它的工作:) –