处理 Angular 中的非幂等$http请求
Dealing with non-idempotent $http requests in Angular
我在概念化如何在整个应用程序中对来自非幂等请求的数据进行建模/访问时遇到了麻烦。
例如,我们假设我有一个 API,它返回一个随机作者供用户查看。 我需要在应用的不同位置显示有关此作者的信息,然后偶尔需要重新调用 getNext
方法来获取下一个随机作者,并更新应用中的所有绑定。
我有以下工厂:
.factory('author', function($http) {
return {
data: {},
getNext: function() {
return $http.get('/path/to/endpoint').then(function(res) {
angular.copy(res.data, this.data)
return res;
}.bind(this));
};
});
然后,在我的控制器中,我只需适当地绑定数据:
.controller('MainCtrl', function($scope, author) {
$scope.author = author.data;
author.getNext();
});
并呈现了我视图中的数据:
<h2>{{author.name}}</h2>
<div ng-repeat="book in author.books">
{{book.title}} - {{book.year}}
</div>
这有效,但是将新对象复制到旧对象中以获取要触发的更新感觉有点笨拙。
更重要的是,除了我最初调用它的控制器之外,我无法访问任何其他控制器中getNext
生成的承诺。 我想做的是data
成为最后的getNext
承诺。 这意味着如果我调用一个新的getNext
,data
成为新的承诺,我所有的.then
都会在加载时重新执行。
也许data
需要成为我解决的$q.defer()
?
我不会让"作者"服务充当作者实体,我只会将其用作 DAO。
.factory('Author', function($http) {
function AuthorService(){
this.getNext = function(){
return $http.get('/path/to/endpoint').then(function(res) {
return res.data;
})
}
};
return new AuthorService()
});
.controller('MainCtrl', function($scope, Author) {
Author.getNext().then(function(author){
$scope.author = author
});
});
相关文章:
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- 使用插件收听Firefox标签的http请求
- http请求使用html而不是json进行响应
- 在node-js路由中发出http请求
- 是否可以在没有HTTP请求或<输入>
- Acync JS HTTP请求通知请求
- PhantomJs在控制台中发出http请求时不会返回任何状态
- PHP处理来自一个页面的http请求,并将其显示在另一个页面上
- Firefox插件-如何发出http请求
- 验收测试主要针对传出的http请求
- 验证HTTP请求来自NFC标签上的点击
- 如何制作'http请求'在Node js中同步
- 为什么我在Cloud9中的http请求总是返回错误
- AngularJS Typeahead和$http请求限制
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 如何使用Chrome扩展API获取网页的所有HTTP请求
- 将http请求中的数据传递给C#控制器
- 在初始化路由之前发送$http请求
- 从客户端捕获 HTTP 请求(包括 ajax)