![](/img/trans.png)
[英]Angular $resource POSTS $promise and $resolved to server on $save
[英]AngularJS using $resource service. Promise is not resolved by GET request
让我们说一个这样的服务:
services.factory('User', function($resource){
return $resource('/rest/usersettings/:username', {}, {
get: {method: 'GET'},
update: {method: 'POST'}
});
});
所以它应该像这样使用:
scope.user = User.get( {username: 'bob'} ); // GET
console.log( JSON.stringify(scope.user) ) // {"$promise":{},"$resolved":false}
所以,当我发送 GET 请求时,一切正常,构建这个 ur + params:
http://localhost:9000/rest/usersettings/bob
问题,为什么我有: {"$promise":{},"$resolved":false}
如果我的 GET 请求导致从服务器返回 json 响应: {"username":"bob","email":"bob@bobs.com"}
那么我希望我的scope.user
被数据填充。
我应该以某种方式等待承诺准备好/解决了吗?
User.get( {username: 'bob'} )
不会立即返回您的实际数据。 当ajax返回时,它会返回一些东西来保存你的数据。 在那( $promise
)上,您可以注册一个额外的回调来记录您的数据。
您可以将代码更改为:
scope.user = User.get( {username: 'bob'} ); // GET
scope.user.$promise.then(function(data) {
console.log(data);
});
您将在那里获取数据,但不会立即获取。 阅读ngResource 上的文档:
重要的是要意识到调用 $resource 对象方法会立即返回一个空引用(对象或数组取决于 isArray)。 从服务器返回数据后,现有引用将填充实际数据。 这是一个有用的技巧,因为通常资源被分配给一个模型,然后由视图呈现。 拥有一个空对象会导致没有渲染,一旦数据从服务器到达,对象就会填充数据,并且视图会自动重新渲染自身以显示新数据。 这意味着在大多数情况下,您永远不必为操作方法编写回调函数。
现在我使用这个(似乎我重复了这个问题)
User.get({
username: 'bob'
}, function(user) {
user.$update(
function(data, headers) {
console.log("GOOD");
},
function(err, headers) {
console.log("BAD");
}
);
});
这应该工作:
User.get( {username: 'bob'} ).$promise.then(function(data) {
scope.user = data.toJSON();
});
toJSON() 清理 Angular 的内部属性 ($$)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.