我有一个名为'userService'的工厂。
.factory('userService', function($http) {
var users = [];
return {
getUsers: function(){
return $http.get("https://www.yoursite.com/users").then(function(response){
users = response;
return users;
});
},
getUser: function(index){
return users[i];
}
}
})
在第一页,单击On按钮我想调用getUsers函数,它将返回'users'数组。
我想在第二页中使用'users'数组。我该怎么办?
P.s:我正在使用getter和setter将响应存储在第一页中,并在第二页中访问相同的内容。这是每个人都在做的事吗?
答案 0 :(得分:3)
<强> 1)。 getUsers 即可。为了保持一致,我仍然会在第二页上使用相同的服务方法,但我还会添加数据缓存逻辑:
.factory('userService', function($q, $http) {
var users;
return {
getUsers: function() {
return users ? $q.when(users) : $http.get("https://www.yoursite.com/users").then(function(response) {
users = response;
return users;
});
},
getUser: function(index){
return users[i];
}
};
});
现在在第二页上,使用情况与第一页上的情况相同:
userService.getUsers().then(function(users) {
$scope.users = users;
});
但此承诺将立即解决,因为用户已加载并可用。
<强> 2)。的getUser 即可。将getUser
方法转换为异步也是有意义的:
getUser: function(index){
return this.getUsers().then(function(users) {
return users[i];
});
}
并在控制器中以这种方式使用它:
userService.getUser(123).then(function(user) {
console.log(user);
});
答案 1 :(得分:2)
这是我在自己的项目中遵循的模式。你可以看到下面的代码
.factory('userService', function($http) {
return {
serviceCall : function(urls, successCallBack) {
$http({
method : 'post',
url : url,
timeout : timeout
}).success(function(data, status, headers, config) {
commonDataFactory.setResponse(data);
}).error(function(data, status, headers, config) {
commonDataFactory.setResponse({"data":"undefined"});
alert("error");
});
}
},
};
在上面的代码中,我使用了通用数据工厂来存储响应。