我有一个角度工厂,其中包括管理对象列表的方法。其中一种方法有助于进行ajax调用并将更多项加载到列表中。当调用该方法时,我需要显示ajax调用的“进行中”状态(即加载项目)。现在,我可以使用像service.isLoading = ...
这样的简单变量,并根据状态将其设置为true
或false
。但是,问题是外部和使用此工厂的任何控制器都可以看到此变量。
angular.module('myApp')
.factory('appFactory', function QuestionsServ(...) {
var service = {
list: []
};
// loading state to help show if system is busy loading ajax data
service.isBusy = false;
service.loadItems = function () {
service.isBusy = true;
// make ajax call here
var request = ...
return request.then( function(res) {
// after successful loading show state is not busy
service.isBusy = false;
...
}
...
但我希望能够在工厂内保持此变量可见。因此,我可以将isBusy
更改为类似于以下内容的内容。
service.isBusy = function () {
return false;
}
但现在它显然也很忙于工厂。我无法再从isBusy
内访问loadItems
。解决这个问题的正确方法是什么?
答案 0 :(得分:2)
您可以将isBusy
设为var
本地模块,并直接在代码中对其进行操作。然后,要将它暴露给外部世界,创建一个返回它的函数 - 这样,其他模块或构造可以访问布尔值以进行显示,但不能在服务中操纵它的值:
angular.module('myApp')
.factory('appFactory', function QuestionsServ(...) {
var service = {
list: []
};
// loading state to help show if system is busy loading ajax data
var isBusy = false;
service.isLoading = function () {
return isBusy;
};
service.loadItems = function () {
isBusy = true;
// make ajax call here
var request = ...
return request.then( function(res) {
// after successful loading show state is not busy
isBusy = false;
...
}