【问题标题】:Return list from resolve从解析返回列表
【发布时间】:2014-11-19 19:19:48
【问题描述】:

我试图从解析中返回一个数据列表,然后在我的控制器中访问该列表。 Resolve 假设在控制器加载之前触发,但似乎恰恰相反。

dbdata.getlist 是一个使用 $http.get 的 api 调用,它返回一个列表。

$routeProvider
    .when('/main', {
        templateUrl: 'views/main.html',
        resolve : {
            listdata: ['$q','dbdata',function ($q,dbdata) {
                dbdata.getlist(function(data){
                     return data;
                });
            }]
        },
        controller: 'MainCtrl'
    })

....
}

angular.module('amebaTvApp')
  .controller('MainCtrl', ['$scope',
    function ($scope,listdata) {
      $scope.list = listdata;
...
  }]);

建议修改:

当我尝试下面的代码时,我得到 Cannot read property 'then' of undefined

 listdata: ['$q','dbdata',function ($q,dbdata) {
                var deferred = $q.defer();
                dbdata.getFeatures(function(data){
                     deferred.resolve(data);
                });
                return deferred.promise;
            }]

....

 listdata.then( function(data) { 
            $scope.list = data;  
      });

控制器加载时lisdata似乎未定义,这就是我收到错误的原因:无法读取未定义的属性'then'

如果我像这样访问列表数据:$route.current.locals.listdata 那么它可以工作。

【问题讨论】:

  • 检查控制器中的承诺... listdata.then( function(data) { $scope.list = data; })
  • @Asik 我正在返回一个列表,因此函数 'then' 不能应用于它。
  • @Fabii 你从你的回调函数返回一个列表不是从你的解析函数。 resolve 的想法是返回一个 Promise,当该 Promise 解决后,它将允许更改路由并将该值从 Promise 注入到您的新控制器中。
  • 让 getList 返回一个 promise,然后用 then 链接返回它
  • @Brocco 我上面建议的编辑是否正确?

标签: angularjs promise


【解决方案1】:

通过 $route.current.locals.listdata 访问列表数据似乎已经成功了。这是否是正确的方式我不太确定。任何反馈都会很棒。

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 2017-04-28
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2015-06-26
    • 2020-07-15
    相关资源
    最近更新 更多