У меня есть это состояние, чтобы перейти в форму редактирования профиля пользователя:
//state for edit User Profile
.state('users.edit', {
url: '/users/{id}/edit',
templateUrl: 'users/user-edit.html',
controller: 'UserEditCtrl',
resolve: {
user: ['$stateParams', 'users', function($stateParams, users) {
return users.get($stateParams.id);
}]
}
});
Кнопка "Изменить профиль" отправляет правильный идентификатор:
ng-href="#/users/{{user.id}}/edit"
Когда я нажимаю на него, он переходит к #/users/1/edit, поэтому здесь нет проблем.
Модель GET:
angular.module('bidrp')
.factory('users', [
'$http',
function($http){
var o = {
users: [{email:"[email protected]"}]
};
o.get = function(id) {
return $http.get('/users/' + id + '.json').then(function(res){
return res.data;
});
};
return o;
}]);
Когда я нажимаю кнопку "Изменить профиль", он отправляет запрос на получение /users/edit.json, и я, конечно, получаю сообщение об ошибке 500. Он должен отправлять запрос GET в /users/1.json, а не...
Почему Angular считает, что "редактировать" - это мой ID, а не {id}?
Похоже, вы используете ui-router.
Маршрут обычно имеет :id
но работает даже с {id}
.
Второй момент - когда вы перемещаетесь, вы не должны использовать ng-href
но ui-sref
: <a ui-sref="users.edit({id: user.id })">...
Я создал для вас рабочее решение с вашим кодом (откройте вкладку в консоли на консоли, также см. Разрешение фабрики ваших пользователей) http://plnkr.co/edit/pseDp460zJb2Na4AgjSh?p=preview (когда вы прокомментируете 38 строк в script.js, вы будет иметь "рабочее приложение")
{id}