[英]How to remove $promise and $resolved from json object
我在angular中使用$ resource來獲取json對象,其結構定義如下
[
{
"id": 0,
"name": "Type1"
},
{
"id": 1,
"name": "Type 2"
}
]
獲取數據后... console.log(jsonObject)給了我
[Resource, Resource, $promise: Object, $resolved: true]
如何從結果對象中刪除$ promise和$ resolved? 我嘗試了angular.fromJson(json),但我仍然看到這些對象仍然存在。
我正在尋找相同的答案,但此刻我只知道這個丑陋的黑客:
寫一個像這樣的函數:
function cleanResponse(resp) {
return JSON.parse(angular.toJson(resp));
}
並在每個查詢中調用它(丑陋,是的):
function getSmt() {
Resource.get({}, function (data) {
$scope.some = cleanResponse(data);
}, function (responce) {
//handle error
})
}
如果有人教我如何正確地做,我會很高興
我的項目示例
Diary.getSharedWithMe(function(data) {
delete data.$promise;
delete data.$resolved;
_self.sharedDiariesWithMe = data;
}, function(error) {
console.log(error)
});
從這個答案 ,它看起來yourResource.toJSON()
隨時可用。
是的,我多次遇到同樣的問題,總是使用$ http而不是$ resource, 但是 ,今天我決定嘗試解決這個問題。 我希望有人也會在某一天找到這個有用的東西。
所以,在你收到帶有$ promise的對象之后,你所做的只是使用angular.copy(data)
,如下所示:
someService.getSomething($scope.someId).$promise.then(function (data) {
if (data) {
$scope.dataWithoutPromise = angular.copy(data);
}
});
之后,您將看到dataWithoutPromise
只包含您需要的對象,$ promise和$ resolved消失了。
我面臨同樣的問題。 實際上,您只需使用相同版本的角度和角度資源,它就像魅力一樣。 希望能幫助到你 !
簡答:angular.fromJson(angular.toJson(resp)); 這將刪除所有“角度特定”功能等,並將返回一個干凈的數據對象。
您是否在您的$resource
對象中使用isArray
或.query()
?
來自$ resource docs: isArray – {boolean=} – If true then the returned object for this action is an array.
更新:
如果您正確使用$resource
,您可以使用以下選項:
1)讓后端返回對象中包含的數據,例如。 { data: [] }
而不僅僅是一個數組。
2)如果無法做到這一點,請使用$resource.query()
的回調,例如。
MyResource.query({ myParams: 'something'}, function(result) {
// Do something with the plain result
});
我為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);
});
});
更簡單的方法是在控制器中添加angular.toJson
yourApp.controller('Controller', ['$scope', 'Service',
function ($scope, Service, commonServices) {
Service.get().then(function (data) {
$scope.myData = angular.toJson(data);
});
});
請簡單地這樣做:
jsonObject。$ promise = undefined; jsonObject。$ resolved = undefined;
$ promise和$ resolved不會被刪除,但你可以做你想要的。
嘗試在您的服務中編寫類似的代碼:
yourApp.factory('Service', ['$resource', function ($resource) {
return $resource('your/rest/api/path');
}]);
然后在你的控制器中這樣的事情:
yourApp.controller('Controller', ['$scope', 'Service', function ($scope, Service) {
Service.get().then(function (data) {
$scope.myData = data;
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.