【问题标题】:Angular ui-router cannot resolve $resource resultsAngular ui-router 无法解析 $resource 结果
【发布时间】:2015-04-16 12:17:40
【问题描述】:

在我的 UI 路由器状态之一中,我有以下链接 '/users',它指向显示用户列表的页面。下面是我编写的使用 $resource 调用解析用户列表的代码,但是,加载页面时数据似乎没有解析:

.state('users', {
                    url: '/users',
                    templateUrl: '/assets/angularApp/partials/users.html',
                    controller: 'UserListCtrl as vm',
                    resolve: {

                        users: function ($resource) {

                            return $resource('http://localhost:8080/api/users').query().$promise.then(function(data) {
                                return data;
                            });
                        }
                    }


                })

UserListCtrl 中,我有以下将解析的用户分配给 vm.users 以便用户可以显示在部分页面上:

function UserListCtrl($log, users) {
        var vm = this;
        vm.users = users;
}

然而,该页面只显示了几行空行,没有填写任何数据。所以我认为resolve 在我的网址/users 上无法正常工作,有人能发现哪里有问题吗?谢谢

【问题讨论】:

  • 你的回复是什么样的?
  • 响应是一个 Jason 数组
  • 如果你检查你的范围,vm.users 有什么价值?
  • vm.users 显示“未定义”
  • 您能否在解析中的“返回数据”行中放置一个换行符并检查函数参数?

标签: javascript angularjs angular-ui-router resolve


【解决方案1】:

改成:

users: function ($resource) {
    return $resource('http://localhost:8080/api/users').query().$promise;
}

因为这样你返回了 Promise,并且通过使用 then(...),你正在解决其中的 Promise 并且只是返回数据,因此它不会将它传递给控制器​​,因为它在控制器已加载。

【讨论】:

  • 解释您的答案为何有效将有助于您的读者学习。
  • 我当时很忙,所以我必须快点,但现在有关于我如何理解它的解释以及我说改变它的原因。但这是一个很好的思考,谢谢:)
  • 这个问题来得太晚了,但是我们如何在数据处理被传递之前处理它呢?例如,如果我想拦截请求中的错误并改为返回默认值
  • 对不起,回复晚了,你必须返回一个承诺,所以你可以使用 var someVar = $q.defer;并提出请求,然后在成功时执行 someVar.resolve(data);并返回 someVar.promise;对于用户,用户:function ($resource, $q) { var someVar = $q.defer(); $resource('localhost:8080/api/… { // 对数据做一些事情 someVar.resolve(data); });返回 someVar.promise; }
【解决方案2】:

使用$q 服务会帮助你

var userVal = $resource('http://localhost:8080/api/users').query()
retrun $q.resolve(userVal.$promise).then(function(r){ return r;});

在你的控制器里面,你很高兴

vm.users = users

【讨论】:

  • $q 服务,可帮助您异步运行函数,并在完成处理时使用它们的返回值(或异常)。 link
猜你喜欢
  • 2015-05-21
  • 2015-11-19
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多