$资源解决不起作用

时间:2013-12-17 04:45:43

标签: angularjs deferred

我正在使用AngularJS开展我的第一个项目,而且我没有找到这个问题的正确答案,这些是我的应用程序中的两段代码:

$routeProvider
            .when('/claim/:code', {
                templateUrl: 'views/RewardClaim.html',
                controller: 'RewardClaimCtrl',
                resolve: {
                    DataCode: ['Api', '$route', function (Api, $route) {
                        var code = $route.current.params.code;

                        return Api.code({code: code});
                    }]
                }
            })
            .when('/:slug', {
                templateUrl: 'views/Page.html',
                controller: 'PageCtrl',
                resolve: {
                    DataPage: ['Api', '$route', function (Api, $route) {
                        var slug = $route.current.params.slug;

                        return Api.page({slug: slug});
                    }]
                }
            })
            .otherwise({
                redirectTo: '/home'
            });

这是我的工厂

angular.module('frontendApp')
  .factory('Api', ['$resource', function ($resource) {
        var SERVER_URL = '/api/index.php/';

        return $resource(SERVER_URL, {}, {
            code: {
                method: 'GET',
                url: SERVER_URL+'code/:code',
                cache: true
            },
            page: {
                method:'GET',
                url: SERVER_URL+'page/:slug',
                cache:true
            }
        });
  }]);

有人告诉我,我不需要使用延迟/承诺因为 $ resource 作为承诺,所以 resolve 应该有效很好,并呈现视图,直到解决完成,但我遇到的问题是,如果我在控制器内调试 DataCode.data/DataPage.data 时打印出null api它正在返回信息。

$ resource 完成任务后,正确的方法是渲染视图和控制器吗?

AngularJS版本:1.2.4

感谢

1 个答案:

答案 0 :(得分:1)

最后我找到了答案,这里是

$routeProvider
            .when('/claim/:code', {
                templateUrl: 'views/RewardClaim.html',
                controller: 'RewardClaimCtrl',
                resolve: {
                    DataCode: ['Api', '$route', function (Api, $route) {
                        var code = $route.current.params.code,
                            DataCode = Api.code({code: code});

                        return DataCode.$promise;
                    }]
                }
            })
            .when('/:slug', {
                templateUrl: 'views/Page.html',
                controller: 'PageCtrl',
                resolve: {
                    DataPage: ['Api', '$route', function (Api, $route) {
                        var slug = $route.current.params.slug,
                            DataPage = Api.page({slug: slug});

                        return DataPage.$promise;
                    }]
                }
            })
            .otherwise({
                redirectTo: '/home'
            });

这是我找到解决方案的地方:phillippuleo.com