AngularJS:观看服务 属性 变化
AngularJS: Watch Service Property Changes
我正在尝试显示我的应用程序的简单下载进度。每次下载文件时,都会向用户显示下载总数 os。例如,文件 1/5、2/5、5/5。
下载由 downloadService 使用 promises 完成,每次成功下载都会增加一个变量。我试图在控制器中显示该数字,但直到现在我都没有成功。我只能显示文件总数(另一个 downloadService 变量)。
我试过直接访问变量,试过 $watch() 但什么也没有。我能够访问变量的唯一方法是使用 $interval 检查更改,但这似乎是我需要的开销。
这就是我所拥有的...
下载服务:
myApp.service('downloadService', ['$http', function($http)
{
this.numberOfDownloads = 0;
this.totalNumberOfDownloads = 0;
var self = this;
var downloadService =
{
downloadList: function(list)
{
self.numberOfDownloads = 0;
self.totalNumberOfDownloads = list.length;
var promise = new Promise(function(resolve, reject)
{
//(...)
//update preloader
downloadService.setDownloadStatus(self.numberOfDownloads);
//(...)
})
.then(function(result)
{
return result;
});
return promise;
},
getDownloadStatus: function()
{
return self.numberOfDownloads;
},
getTotalNumberOfDownloads: function()
{
return self.totalNumberOfDownloads;
},
setDownloadStatus: function(value)
{
self.numberOfDownloads = value;
}
};
return downloadService;
}]);
预加载控制器
myApp.controller('preloader', ['$scope', 'downloadService', '$interval', function($scope, downloadService, $interval)
{
$scope.downloadService = downloadService;
//doesn't work...
$scope.$watch(function()
{
return downloadService.getDownloadStatus();
},
function(value)
{
console.log(value);
}, true);
//works....
$interval(function()
{
console.log($scope.downloadService.getDownloadStatus());
}, 1000);
}]);
我在这里做错了什么?我怎样才能做到这一点?
你试过这个吗:
$scope.$watch(function()
{
return $scope.downloadService.getDownloadStatus();
}); // parenthesis forgotten
我正在尝试显示我的应用程序的简单下载进度。每次下载文件时,都会向用户显示下载总数 os。例如,文件 1/5、2/5、5/5。 下载由 downloadService 使用 promises 完成,每次成功下载都会增加一个变量。我试图在控制器中显示该数字,但直到现在我都没有成功。我只能显示文件总数(另一个 downloadService 变量)。 我试过直接访问变量,试过 $watch() 但什么也没有。我能够访问变量的唯一方法是使用 $interval 检查更改,但这似乎是我需要的开销。
这就是我所拥有的...
下载服务:
myApp.service('downloadService', ['$http', function($http)
{
this.numberOfDownloads = 0;
this.totalNumberOfDownloads = 0;
var self = this;
var downloadService =
{
downloadList: function(list)
{
self.numberOfDownloads = 0;
self.totalNumberOfDownloads = list.length;
var promise = new Promise(function(resolve, reject)
{
//(...)
//update preloader
downloadService.setDownloadStatus(self.numberOfDownloads);
//(...)
})
.then(function(result)
{
return result;
});
return promise;
},
getDownloadStatus: function()
{
return self.numberOfDownloads;
},
getTotalNumberOfDownloads: function()
{
return self.totalNumberOfDownloads;
},
setDownloadStatus: function(value)
{
self.numberOfDownloads = value;
}
};
return downloadService;
}]);
预加载控制器
myApp.controller('preloader', ['$scope', 'downloadService', '$interval', function($scope, downloadService, $interval)
{
$scope.downloadService = downloadService;
//doesn't work...
$scope.$watch(function()
{
return downloadService.getDownloadStatus();
},
function(value)
{
console.log(value);
}, true);
//works....
$interval(function()
{
console.log($scope.downloadService.getDownloadStatus());
}, 1000);
}]);
我在这里做错了什么?我怎样才能做到这一点?
你试过这个吗:
$scope.$watch(function()
{
return $scope.downloadService.getDownloadStatus();
}); // parenthesis forgotten