2014-02-17 72 views
17

我使用的角度$資源得到JSON對象從JSON對象解決了它的結構獲取數據..的​​console.log後下方

[ 
    { 
     "id": 0, 
     "name": "Type1" 
    }, 
    { 
     "id": 1, 
     "name": "Type 2" 
    } 
] 

定義(的JSONObject )給了我

[Resource, Resource, $promise: Object, $resolved: true] 

我怎樣才能刪除$承諾& $從生成的對象解決? 我試過angular.fromJson(json),但仍然看到這些對象仍然存在。

+1

可能的重複[爲什麼角度$資源添加額外的對象($ promise,$ resolve ...)到我的數據響應?](http://stackoverflow.com/questions/22548161/why-does-angular- resource-add-extra-objects-promise-resolve-to-my-data) – FelikZ

+0

user1184100你能接受下面的答案嗎? –

+0

@javarome點下面的解決方案:你可以用'toJSON'函數清理一個結果對象。如果結果是一個數組,你可以用'var cleanList = result.map(function(e){return e.toJSON();})來清理它'' – Carlos

回答

0

您是否使用isArray.query()$resource對象?

從$資源文檔:isArray – {boolean=} – If true then the returned object for this action is an array.

UPDATE:

如果您正確使用$resource,有些選項必須是:

1)具有後端返回目標文件內包含的數據,例如。 { data: [] }而不僅僅是一個數組。

2)如果這是不可能的,使用從$resource.query()回調,例如。

MyResource.query({ myParams: 'something'}, function(result) { 
    // Do something with the plain result 
}); 
+0

我的映射看起來像這樣..{ '得到':{方法: 'GET'}, \t \t \t \t \t '保存':{方法: 'POST'}, \t \t \t \t \t '查詢':{方法: 'GET',IsArray的:真}, \t \t \t \t \t '刪除':{方法: '刪除'}, \t \t \t \t \t '刪除':{方法: '刪除'}, \t \t \t \t \t 'JSONP':{方法: 'JSONP'}, \t \t \t \t \t '把':{方法: 'PUT'} \t \t \t \t \t \t \t \t \t} \t \t \t \t);我使用query()來獲取 – user1184100

+0

我也希望它在{data:[]}中,但現在不可能了,因爲後端已經定義好了,我已經使用了回調函數.. var typeService = restService.async(url); typeService({},function(u,getResponseHeaders){ \t console.log(u); },function(error){ });並且你返回$ promise和$ resource – user1184100

+0

你能設置一個小提琴嗎? –

8

我在尋找相同的答案,但在這一刻,我知道只有這樣醜陋的黑客:

要編寫這樣的FUNC:

function cleanResponse(resp) { 
    return JSON.parse(angular.toJson(resp)); 
} 

,並呼籲它在每一個單個查詢(醜,yep):

function getSmt() { 
    Resource.get({}, function (data) { 
     $scope.some = cleanResponse(data); 
    }, function (responce) { 
     //handle error 
    }) 
} 

我會很高興,如果有人會教我如何正確地做到這一點

+1

是的,如果你需要在(例如)localStorage中放置一個純json對象,你可以使用angular.toJson()方法 –

+0

這不是優化的方法。承諾對象的原型中已經有了JSON()函數。所以你只需要'resp.toJSON()'並獲得沒有額外字段的對象。 – Arashsoft

2

我正面臨同樣的問題。事實上,你只需要使用相同版本的角度和角度資源,它就像魅力一樣工作。 希望它有幫助!

+0

這沒有幫我解決問題 –

1

簡短回答:angular.fromJson(angular.toJson(resp)); 這將刪除所有「角度特定」功能等,並將返回一個乾淨的數據對象。在您的控制器

yourApp.factory('Service', ['$resource', function ($resource) { 
    return $resource('your/rest/api/path'); 
}]); 

然後是這樣的:

-1

嘗試在你的服務代碼是這樣的

yourApp.controller('Controller', ['$scope', 'Service', function ($scope, Service) { 
    Service.get().then(function (data) { 
     $scope.myData = data; 
    }); 
}); 
+1

這將返回'{$$ state:Object}'作爲'json'變量的響應。 – FelikZ

+0

對不起,更新我的回答 – GedankenNebel

+0

實際上它會返回'$ promise:Object,$ resolved:true'作爲作者抱怨。 – FelikZ

0

我做這個快速可重複使用的方法angular.toJson(與領先的$屬性$將被剝離):

yourApp.factory('Service', ['$resource', function ($resource) { 
    return $resource('your/rest/api/path'); 
}]); 

yourApp.factory('commonServices', function() { 
     return { 
       toJson : function(response){ 
        return JSON.parse(angular.toJson(response)); 
        //*or* 
        //return angular.toJson(response); 
       } 
    }); 

然後像這樣在你的控制器:

yourApp.controller('Controller', ['$scope', 'Service','commonServices', 
function ($scope, Service, commonServices) { 
      Service.get().then(function (data) { 
       $scope.myData = commonServices.toJson(data); 
      }); 
     }); 

更簡單的方法就是在控制器

yourApp.controller('Controller', ['$scope', 'Service', 
function ($scope, Service, commonServices) { 
      Service.get().then(function (data) { 
       $scope.myData = angular.toJson(data); 
      }); 
     }); 
4

實例添加angular.toJson從我的項目

Diary.getSharedWithMe(function(data) { 
     delete data.$promise; 
     delete data.$resolved; 
     _self.sharedDiariesWithMe = data; 
    }, function(error) { 
     console.log(error) 
    }); 
3

對,我面臨同樣的問題了幾次,總是最後使用的,而不是$資源$ HTTP,但是,今天我決定嘗試解決這個問題。我希望有一天也會有人發現這個有用的。

因此,您收到的對象與它內部的$承諾,你做什麼,只是用angular.copy(data),像這樣經過:

someService.getSomething($scope.someId).$promise.then(function (data) { 
    if (data) { 
     $scope.dataWithoutPromise = angular.copy(data); 
    } 
}); 

之後,你會看到你的dataWithoutPromise只包含對象你需要,並且$ promise和$ resolved已經消失了。

+2

這不再適用於Angular 1.5。 –