2015-03-02 2 views
0

У меня есть простая конфигурация угловой маршрутизации с домашней страницей и некоторыми пользовательскими профилями. По какой-то причине, когда я перехожу к /users/user_3, контроллер запрашивает индексный маршрут пользователя, users.json, а не users/user_3.json. Это приводит к тому, что служба User жалуется: «Ошибка в конфигурации ресурсов для действия get. Ожидаемый ответ, чтобы содержать объект, но получил массив».id не занят ngRoute

Эта ошибка указывает мне, что $resource знает, что это запрос одного ресурса пользователя, но маршрут PARAMS, по всей видимости, были захвачены должным образом основаны на моем пустячный в консоли:

> $route = angular.element(document.body).injector().get('$route') 
Object {routes: Object, reload: function, updateParams: function, current: Object} 
> $route.current.params 
Object {id: "user_3"} 

Так что, похоже, как где-то между когда параметры маршрута захватываются и выполняется фактический запрос на обслуживание, что-то вызывает исчезновение параметра маршрута.

Вот мой маршрут конфигурации:

$routeProvider.when('/', { 
    controller: 'HomeCtrl', 
    templateUrl: '/assets/views/home.html', 
}) 
.when('/users/:id', { 
    controller: 'UserCtrl', 
    templateUrl: '/assets/views/user.html', 
}); 

Моя служба Пользователь:

angular.module('amn.services').service('User', [ 
    '$resource', function($resource) { 
    return $resource('/users/:id.json', { 
     id: '@id' 
    }); 
    } 
]); 

... и мой UserCtrl:

angular.module('amn.controllers').controller('UserCtrl', function($scope, User) { 
    return User.get(function(data) { 
    return $scope.user = data; 
    }); 
}); 

Может кто-нибудь сказать мне, что происходит? Благодаря!

ответ

1

Вы используете недвижимость @ неправильно и в этом случае, не передавая при этом свой id ресурс. Из Angular Documentation:

Если значение параметра с префиксом @, то значение для этого параметра будет извлечено из соответствующего свойства на объекте данных (при условии, при вызове методы действия).

В вашем случае, вы не имеете объект еще, так как это GET вызов, так что нет ни одного объекта, чтобы вытащить из id. Ваш звонок get() по существу запрашивает все объекты User. @ более подходит для PUT, POST и DELETE глаголов.

Чтобы исправить код, измените свой контроллер на следующее:

angular.module('amn.controllers') 
    .controller('UserCtrl', function($scope, $routeParams, User) { 
    return User.get({id: $routeParams.id}, function(data) { 
+0

ДА! Это сработало, спасибо. – acobster

Смежные вопросы