$ state resolve忽略ID

时间:2015-10-29 19:31:05

标签: angularjs

我有这种状态转到用户配置文件编辑表单:

  //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);
      }]
    }
  });

编辑个人资料按钮会发送正确的ID:

ng-href="#/users/{{user.id}}/edit"

当我点击它时会转到#/ users / 1 / edit,所以这里没问题。

GET模型:

angular.module('bidrp')
.factory('users', [
'$http',

function($http){
  var o = {
    users: [{email:"user@email.com"}]
  };
  o.get = function(id) {
    return $http.get('/users/' + id + '.json').then(function(res){
      return res.data;
    });
  };
  return o;
}]);

当我单击编辑配置文件按钮时,它会向/users/edit.json发送一个get请求,我当然会收到错误500.它应该向/users/1.json发送一个GET请求。

为什么Angular认为“编辑”是我的ID,而不是{id}?

1 个答案:

答案 0 :(得分:1)

看起来你正在使用ui-router。

路线通常位于www.example.com/#!/video/random_numbers/some-random-string,但即使与:id一起使用。

第二点是当你导航时,你不应该使用{id},而ng-href就像:ui-sref

我为您创建了使用您的代码的工作解决方案(在控制台中打开网络选项卡也看到您的用户工厂的解决方案) http://plnkr.co/edit/pseDp460zJb2Na4AgjSh?p=preview (当您在script.js中评论38行时,您将拥有"正在运行的应用程序")