AngularJS $ routeProvider.when()的解析路由参数 - 那个'key'是什么?

时间:2013-10-10 11:54:39

标签: angularjs

AngulaR resolve API

API说要解决:

  

key - {string}:要注入控制器的依赖项的名称。

@egghead,关于这个主题有这个视频:

egghead - Angular resolve

我不明白的是,该关键对象是什么以及为什么上述视频的作者确实将控制器注入其自身

1 个答案:

答案 0 :(得分:2)

  

key - {string}:要注入的依赖项的名称   控制器。

app.config(function($routeProvider) {
    $routeProvider.
      when('/', {
        controller: 'ListCtrl',
        resolve: {
          myResolve: function(MyService) {
            return MyService();
          }
        },
        templateUrl:'./views/list.html'
  })
});

而不是(在控制器中)

app.controller('MyController',function($scope,MyService){
   $scope.data =  MyService();    
});

如果您使用解决方法

app.controller('MyController',function($scope,myResolve){
    $scope.data =  myResolve;      
});

<强>更新

一个工作示例

<!doctype html>
 <html ng-app="myModule">
    <head>
        <meta charset="utf-8">

    </head>
    <body>
        <div id="content" data-ng-view=""></div>
        <script src="http://code.angularjs.org/1.0.8/angular.min.js"></script>
        <script>
            var myModule = angular.module('myModule', []);
            myModule.config(function ($routeProvider) {
                $routeProvider
                    .when('/', {
                        templateUrl: './index.html',
                        controller: 'IndexCtrl',
                        resolve: {
                            hello: function(Hello) {
                                return Hello.getMessages();
                            }
                        }
                    })
                    .otherwise({
                        redirectTo: '/'
                });

            });
            myModule.factory('Hello', function($q, $timeout) {
                var getMessages = function() {
                    var deferred = $q.defer();
                    $timeout(function() {
                        deferred.resolve('Hello');

                    }, 1000);

                    return deferred.promise;
                };
                return {
                    getMessages: getMessages
                };
            });
            myModule.controller('IndexCtrl',function($scope,hello){
               $scope.hello =  hello;
            });
        </script>
    </body>
</html>

视图

<p>{{hello}}</p>