我返回一个带有网址的资源
$resource("http://foo.com/bar.json").get().
$promise.then(function(data){ $scope.result = data},
function(error){ $scope.msg = "error" } );
资源回报
["item1"...."item_n",.....,"$promise", "$resolved", "$get", "$save", "$query", "$remove", "$delete"]
为什么我会在数据集中获取所有这些对象。我猜$ promise只返回所有这些并等待服务器响应。但是,一旦我有服务器响应,我可以在没有Promise术语的情况下获取我的服务器数据吗?
答案 0 :(得分:33)
如果你在这里看一下角度来源:
https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L505
资源原型链上有一个toJSON方法,可以为您完成此任务。
例如:
$resource("http://foo.com/bar.json").get(function(res) {
$scope.result = res.toJSON();
});
答案 1 :(得分:5)
您需要从后端返回包含{{result':{'some_key':'some_val'}}的结果。 或者就像上面描述的那样。
Diary.getSharedWithMe(function(data) {
delete data.$promise;
delete data.$resolved;
_self.sharedDiariesWithMe = data;
}, function(error) {
console.log(error)
});
答案 2 :(得分:4)
$resource
返回一个对象或数组,它将在调用完成时拥有您的数据。所有这些功能都可以帮助您,$resource
主要用于CRUD操作。如果你想要数据,你必须等待它返回,所以你也可以使用诺言。如果要删除所有这些属性,可以使用angular.toJson
将其转换为json,但在将其发布回资源或$ http调用时,angular会为您执行此操作,因此您不必这样做。
$scope.data = $resource("http://foo.com/bar.json").get();
// $scope.data does not have your data yet, it will be
// populated with your data when the AJAX call completes
...
// later in a call from a save button maybe you can just do
// this to post your changes back:
$scope.data.$save();
答案 3 :(得分:2)
所以,如果其他人在这里磕磕绊绊,并且不了解承诺/角度,这就是正在发生的事情。当您使用.then()
或.get()
时,您会在同一个对象中获得一个promise和一些帮助函数。这很棒,因为您不必担心定义回调以及数据是否可用,因为promise对象总是有一些属性。此对象包含您在其中的另一个对象中的原始数据。所以promise对象是嵌套的,你只需要在数据就绪时引用数据对象。
这是我正在做的事情
$resource("http://foo.com/bar.json").get().
$promise.then(function(data){ $scope.result = data},
//data is actually a promise object.
function(error){ $scope.msg = "error" } );
承诺对象
请注意,数据实际上位于另一个名为" data"的对象下。因此,在您的成功回调中,只需获取您应该在这种情况下执行的数据:data.data
答案 4 :(得分:0)
要从每个请求中自动删除它们,您可以添加拦截器:
angular.module('app').config(config);
config.$inject = ['$httpProvider'];
function config($httpProvider) {
$httpProvider.interceptors.push(interceptor);
}
interceptor.$inject = [];
function interceptor() {
return {
request: (config) => {
if (config.data) {
delete config.data.$promise;
delete config.data.$resolved;
}
return config;
}
};
}