将解析结果传递给AngularJS中的控制器失败

时间:2015-01-22 10:56:18

标签: angularjs

我按以下方式设置主模块的配置:

angular.module('main').config(function($routeProvider, $locationProvider, ConfigProvider)
    {
        $routeProvider
            .when('/home',
            {
                templateUrl : ConfigProvider.path.views + '/page/home.html',
                controller : 'PageHomeCtrl',
                resolve : {
                    resolveHomeData : function(ResolveService) { return ResolveService.resolveHome() }
                }
            });

        $locationProvider.html5Mode(true);
    }
);

ResolveService负责解决路线问题,目前非常简单:

angular.module('app.resolve').factory('ResolveService', function($q, UserService)
{
    return {
        resolveHome : function()
        {
            var deferred = $q.defer();

            UserService.find('me', function(data)
            {
                deferred.resolve(data);
            }, function(data, status)
            {
                deferred.reject(data);
            });

            return deferred.promise;
        }
    }
});

而不是PageHomeCtrl

angular.module('app.ui.page.home').controller('PageHomeCtrl', function($q, $scope, UserService, resolveHomeData)
{

});

正如您所见,我在其中注入resolveHomeData但是我从AngularJS收到以下错误:

Unknown provider: resolveHomeDataProvider

为什么resolveHomeData未正确注入我的控制器?

我使用Gulp脚本连接所有内容,并按以下顺序包含所有AngularJS文件:

  1. 模块定义
  2. 模块配置
  3. 提供商
  4. 控制器
  5. 指令
  6. 过滤器
  7. 服务
  8. 编辑:

    这是main模块定义:

    angular.module('main',
        [
            'ngRoute',
            'app.config',
            'app.resolve',
            'app.ui.page.index',
            'app.ui.page.home',
            'app.ui.modal.login'
        ]
    )
    

1 个答案:

答案 0 :(得分:1)

编辑:由于您的评论,我之前删除了我的答案。

AngularJS认为您的resolveHomeData是提供者/服务而非解析数据。发生这种情况是因为控制器也是偶然在HTML中定义的,因此具有两倍的控制器声明:一次在HTML中,一次在配置中。

删除HTML,它应该可以工作。