Как удалить $prom и $, разрешенные с помощью json-объекта
Я использую $resource в angular, чтобы получить объект json, и его структура определена ниже
[
{
"id": 0,
"name": "Type1"
},
{
"id": 1,
"name": "Type 2"
}
]
после извлечения данных. console.log(jsonObject) дает мне
[Resource, Resource, $promise: Object, $resolved: true]
Как я могу удалить $prom и $resolved из результирующего объекта?
Я попробовал angular.fromJson(json), но все же вижу, что эти объекты все еще существуют.
Ответы
Ответ 1
Я ищу тот же ответ, но в этот момент я знаю только этот уродливый хак:
Чтобы написать 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
})
}
Я буду рад, если кто-нибудь научит меня, как это сделать правильно
Ответ 2
Пример из моего проекта
Diary.getSharedWithMe(function(data) {
delete data.$promise;
delete data.$resolved;
_self.sharedDiariesWithMe = data;
}, function(error) {
console.log(error)
});
Ответ 3
От этот ответ, похоже, что yourResource.toJSON()
легко доступен.
Ответ 4
Правильно, я сталкивался с той же проблемой несколько раз и всегда заканчивал тем, что использовал $http вместо $resource, однако, сегодня я решил попробовать и решить эту проблему. Надеюсь, кто-то найдет это полезным и в один прекрасный день.
Итак, после того, как вы получите свой объект с $prom в нем, вы просто используете angular.copy(data)
, например:
someService.getSomething($scope.someId).$promise.then(function (data) {
if (data) {
$scope.dataWithoutPromise = angular.copy(data);
}
});
После этого вы увидите, что ваш dataWithoutPromise
содержит только те объекты, которые вам нужны, а $обещают и $разрешены.
Ответ 5
У меня такая же проблема. Фактически, вам просто нужно использовать ту же версию angular и angular -resource, и она будет работать как шарм.
Надеюсь, это поможет!
Ответ 6
Короткий ответ: angular.fromJson(angular.toJson(resp));
Это приведет к удалению всех "angular определенных" функций и т.д. И вернет вам чистый объект данных.
Ответ 7
Используете ли вы isArray
или .query()
свой объект $resource
?
В документах $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
});
Ответ 8
Я сделал этот метод быстрого повторного использования для 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);
});
});
Ответ 9
Попробуйте ввести что-то вроде этого в свою службу:
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;
});
});