Angularjs 角度js$http工厂模式
我有一个名为“用户服务”的工厂Angularjs 角度js$http工厂模式,angularjs,angular-promise,Angularjs,Angular Promise,我有一个名为“用户服务”的工厂 .factory('userService', function($http) { var users = []; return { getUsers: function(){ return $http.get("https://www.yoursite.com/users").then(function(response){ users = response;
.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];
}
}
})
在第一页中,单击按钮“我想调用getUsers函数”,它将返回“users”数组
我想在第二页中使用“用户”数组。我怎么做
注意:我使用getter和setter将响应存储在第一页,并在第二页访问相同的响应。每个人都是这样做的吗。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)。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);
});
以下是我在自己的项目中遵循的模式。您可以看到下面的代码
.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");
});
}
},
};
售后服务呼叫在公共数据工厂中设置响应数据,以便整个应用程序都可以访问该数据
在上面的代码中,我使用了公共数据工厂来存储响应。以下是我在自己的项目中遵循的模式。您可以看到下面的代码
.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");
});
}
},
};
售后服务呼叫在公共数据工厂中设置响应数据,以便整个应用程序都可以访问该数据
在上面的代码中,我使用了公共数据工厂来存储响应。在
getUser()
方法中包含逻辑,以处理users
为空或null的情况,这可能也是谨慎的做法。@Brett我同意。但是我仍然怀疑什么方法更好:在用户不可用时调用getUser
时抛出错误,或者让getUser
也返回像getUsers
这样的承诺@dfsq谢谢你的回答。我所做的是创建了两个函数,第一个用于服务调用,另外一个用于为数据分配响应。在第二个函数中,我返回数据。但是,如果我反复拨打服务电话,相同的数据将被转发。我希望你的回答能解决这个问题@dfsq当数据不可用时,我也有同样的疑问,什么是更好的方法?我们应该在工厂本身还是在控制器中进行后处理?@GangadharJannu我会让getUser
也返回承诺,就像我在回答第2点中描述的那样。这样,我们可以确保总是在用户数组可用后检索用户。在getUser()
方法中包含逻辑,以处理users
为空或null的情况,这可能也是谨慎的做法。@Brett我同意。但是我仍然怀疑什么方法更好:在用户不可用时调用getUser
时抛出错误,或者让getUser
也返回像getUsers
这样的承诺@dfsq谢谢你的回答。我所做的是创建了两个函数,第一个用于服务调用,另外一个用于为数据分配响应。在第二个函数中,我返回数据。但是,如果我反复拨打服务电话,相同的数据将被转发。我希望你的回答能解决这个问题@dfsq当数据不可用时,我也有同样的疑问,什么是更好的方法?我们应该在工厂本身还是在控制器中进行后处理?@GangadharJannu我会让getUser
也返回承诺,就像我在回答第2点中描述的那样。通过这种方式,我们可以确保总是在用户数组可用之后检索用户。