Обработка ответа данных от $ resource в angular js

У меня RESTful приложение с Laravel 4 и Angular JS.

В моем контроллере Laravel

public function index() {

  $careers = Career::paginate( $limit = 10 );

  return Response::json(array(
    'status'  => 'success',
    'message' => 'Careers successfully loaded!',
    'careers' => $careers->toArray()),
    200
  );
}

И угловой скрипт,

var app = angular.module('myApp', ['ngResource']);

app.factory('Data', function(){
    return {
        root_path: "<?php echo Request::root(); ?>/"
    };
});

app.factory( 'Career', [ '$resource', 'Data', function( $resource, Data ) {
   return $resource( Data.root_path + 'api/v1/careers/:id', { id: '@id'});
}]);

function CareerCtrl($scope, $http, Data, Career) {

    $scope.init = function () {
        $scope.careers = Career.query(); 
    };
}

Здесь меня немного смущает обработка данных ответа для назначения переменной области видимости, теперь я получаю пустой массив [] в $scope.careers. А также как я могу справиться с успехом и ошибкой, чтобы показать некоторые сообщения, подобные следующему нормальному $http service,

$scope.init = function () {

    Data.showLoading(); // loading progress
    $http({method: 'GET', url: Data.root_path + 'api/v1/careers'}).
    success(function(data, status, headers, config) {
        Data.hideLoading();
        $scope.careers = data.careers.data;
    }).
    error(function(data, status, headers, config) {

        if(data.error.hasOwnProperty('message')) {
            errorNotification(data.error.message); 
        } else {
            errorNotification();
        }

        $scope.careers = [];
    });
};

См. Мой запрос в консоли с помощью $ resource.

введите описание изображения здесь


person devo    schedule 01.11.2013    source источник


Ответы (2)


Попробуй это:

app.factory( 'Career', [ '$resource', 'Data', function( $resource, Data ) {
   return $resource( Data.root_path + 'api/v1/careers/:id', { id: '@id'}, {
    query: {
        isArray: false,
        method: 'GET'
    }
   });
}]);


Career.query(function(res) {
   $scope.careers = res.careers.data;
}, function(error) {
  // Error handler code
}); 
person Nitish Kumar    schedule 05.11.2013
comment
то же самое здесь боролось часами - person Awena; 21.09.2014

См .: http://docs.angularjs.org/api/ngResource. $ Resource

$scope.init = function () {
    var success = function(careerList, getResponseHeaders){
      $scope.careers = careerList;
    };
    var failure = function(data){
      // TODO
    };
    Career.query(success, failure); 
};

Из-за этих причуд и других неприятностей я бы предложил использовать Restangular вместо ресурса $ по умолчанию. Это делает жизнь намного проще

person fabrizioM    schedule 01.11.2013
comment
Мой первый вопрос: почему я получаю пустой массив [] в $ scope.careers? - person devo; 01.11.2013
comment
Это не сбой. См. Снимок экрана, я получаю все значения, как я могу сопоставить это с переменной области? - person devo; 01.11.2013
comment
вы получаете этот снимок экрана с вызовом $ resource или с вызовом $ http? Также попробуйте отредактировать новый код. Вы получаете данные по обратному вызову, которые могут быть выполнены после возврата из функции запроса. - person fabrizioM; 01.11.2013
comment
Снимок экрана взят из ресурса $ resource, и, используя ваш код, я получаю то же самое и $scope.careers как undefined - person devo; 02.11.2013