$ state resolution игнорирует идентификатор

0

У меня есть это состояние, чтобы перейти в форму редактирования профиля пользователя:

  //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}?

  • 0
    Если бы вы пробовали маршрут как `url: '/ users /: id / edit',` я не так уверен насчет {id}
  • 0
    да уже пробовал, результаты в той же истории
Теги:

1 ответ

1
Лучший ответ

Похоже, вы используете 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, вы будет иметь "рабочее приложение")

  • 0
    да, спасибо, UI-SREF сделал это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню