将json数据从resolve传递给控制器​​ui-router

时间:2014-05-12 23:25:46

标签: angularjs

对于棱角分明的我来说还是比较新的,对于这个新问题我很抱歉,但我完全被难过了。

我正在尝试使用resolve在路线更改时使用数据预加载我的控制器。我从服务器获取数据,我将解析对象注入控制器,但是有些东西无效。

这是ui-router的解析部分

resolve: {
    categoryList: function ($http) {
        $http.get('cfc/category.cfc?method=getCategories')
            .success(function (data) {
                return data;
            });
    }
},...

和控制器

app.controller('CategoryController', ['$scope', '$http', 'categoryList', 
    function ($scope, $http, categoryList) {...

有人可以解释我做错了吗?

2 个答案:

答案 0 :(得分:3)

小细节:

resolve: {
    categoryList: function ($http, $q) {
        var defObj = $q.defer();
        $http.get('cfc/category.cfc?method=getCategories')
            .success(function (data) {
                defObj.resolve(data);
            });
        return defObj.promise;
    }
},...

发生的事情是您的承诺在您的控制器加载后解析,这意味着您的数据未被传入。通过添加延迟对象并将其返回,您可以将承诺的数据注入您的控制器AFTER它结算了,一切都应该是好的。此外,您可能希望使用错误处理程序处理$ http调用失败,并插入一些您可以在控制器中检测并作出反应的虚拟数据。

答案 1 :(得分:0)

实际上$http默认返回一个承诺,所以你要做的就是 javascript return $http.get( ...