使用resolve在$ routeProvider中初始化数据

时间:2014-11-21 14:19:40

标签: angularjs

我有一个AngularJS应用程序,并且需要在控制器初始化之前从REST API初始化数据。我使用"解决"在routeProvider中,还在控制器中注入相关值,以使这些数据可用。代码片段如下:

RouteProvider代码段:

myApp.config(function($routeProvider) {
    $routeProvider
....
.when('/account', {
        templateUrl : path + 'admin/js/pages/inputs/account.html',
        controller  : 'mainController',
        resolve: {
            data: function() {
              return $http.get(api_path + 'dashboard/get_accounts');
            }
        }
    })

myApp.controller('mainController', function($scope,$http, data, $routeParams, DataService) {
...
console.log(data);
}

控制台应该显示数据,我得到以下错误"错误:[$ injector:unpr]未知提供者:dataProvider< - data"

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是因为数据提供程序尚未实例化,它在提供程序准备就绪之前实例化控制器,作为未定义和未知的提供程序进行实现。

尝试这样的返回承诺的内容:

myApp.config(function($routeProvider, $q) {
    $routeProvider, $q
....
.when('/account', {
        templateUrl : path + 'admin/js/pages/inputs/account.html',
        controller  : 'mainController',
        resolve: {
            data: function() {
              return $q.all($http.get(api_path + 'dashboard/get_accounts'));
            }
        }
    })

现在,在promise完全解决之前,控制器不会实例化。根据$ routeProvider的文档以及它如何处理解决方案中的promise。

Angular网站上的

$routeProvider

  

resolve - {Object。=} - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解决了所有promise,则会注入已解析的promise的值并触发$ routeChangeSuccess事件。如果任何promise被拒绝,则触发$ routeChangeError事件。