Первое — чтобы преобразовать ангуларовский объект (в котором есть всякие одно- и двудолларовые параметры, все эти
$xxx и
$$xxx) в нормальный (т.н.
raw json) нужно использовать стандартные ангуларовские методы из коробки:
angular.fromJson(response)
и
angular.toJson(response)
Просто поковыряйте эти функции и посмотрите, что они вернут.
По поводу промисов. Когда вы вызываете какой-либо
$resource-метод, например,
.query(), то вам сразу же, моментально, возвращается объект с двумя параметрами —
$promise и
$resolved: false. После того, как ресурс получил данные, в ваш объект с двумя параметрами добавляется ещё куча данных (ну, json-данные, что вам вернул сервер), а параметр
$resolved становится
true.
Так вот
$promise нужен тогда, когда после загрузки данных вам нужно что-то сделать :) Ведь когда вы послали запрос, вы не знаете, когда придет ответ, а
$promise знает и позволяет вам что-нибудь сделать именно после загрузки. Обращаться к промису нужно так:
vm.data = dataService.getData().$promise.then(success, error);
function success(resource) {
// тут не данные в resource, а объект $resource с данными, тут можно почистить его через angular.fromJson и т.п.
}
Тут, после получения данных, ваш
vm.data сразу же пополняется данными ответа (и вы там что-то выводите через
ng-repeat — Ангулар там сам понимает, что выводить нужно только ваши данные, и не выводит еще два параметра
$promise и
$resolved, хотя они в объекте присутствуют, как вы уже в
console.log вывели и убедились), а в функции
success можно еще что-нибудь сделать.
Можно так же сразу и не присваивать
vm.data ничего, а сначала сделать какие-то действия в
success и только потом присвоить, вот так:
dataService.getData().$promise.then(success, error);
function success(resource) {
// тут не данные в resource, а объект $resource с данными, тут можно почистить его через angular.fromJson и т.п.
// сначала что-нибудь делаем с полученными данными, а потом присваиваем их в скоуп
vm.data = transformMyData(resource);
}