Подтвердить что ты не робот

Как удалить $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), но все же вижу, что эти объекты все еще существуют.

4b9b3361

Ответ 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;
    });
});