Page 359 - AngularJS权威教程
P. 359

25.3  ui-router   339


                      template: '<h1>Hello {{ name }}</h1>'                                          19
                  });
                  2. controller
                                                                                                     20
                  和ngRoute一样,你可以给已经注册好的控制器关联一个URL(使用字符串),也可以创建一
              个控制器函数作为状态控制器。
                                                                                                     21
                  如果没有定义模板(使用上述方式之一),就不会创建这个控制器。

                  3. resolve                                                                         22
                  我们还可以使用resolve功能解析要注入到控制器中的依赖列表。在ngRoute中,resolve选
              项允许你在路由被真实渲染之前解析promise。在angular-route内,对于可以如何使用这个选项                                   23
              更自由。
                  这个resolve选项就是一个对象,其中键就是要注入到控制器中的依赖名称,而其值就是待                                        24
              解析的factories。

                  如果传入一个字符串,angular-route会尝试匹配一个现有的已注册的服务。如果传入一个                                     25
              函数,则注入这个函数,而函数的返回值就是依赖。如果这个函数返回一个promise,它会在控
              制器被实例化之前解析,同时其值(就像ngRoute)会注入到控制器中。
                                                                                                     26
                  $stateProvider.state('home', {
                      resolve: {
                          // 当结果不是promise时立即返回                                                       27
                          person: function() {
                              return {
                                  name: "Ari",
                                  email: "ari@fullstack.io"                                          28
                              }
                          },
                          // 这个函数返回一个promise,它会在控制器实例化之前解析                                           29
                          currentDetails: function($http) {
                              return $http({
                                  method: 'JSONP',
                                  url: '/current_details'                                            30
                              });
                          },
                          // 还可以在另一个解析中使用上面返回的promise                                                31
                          facebookId: function($http, currentDetails) {
                              $http({
                                  method: 'GET',
                                  url: 'http://facebook.com/api/current_user',                       32
                                  params: {
                                      email: currentDetails.data.emails[0]
                                  }                                                                  33
                              });
                          }
                      },
                      controller: function($scope. person, currentDetails, facebookId) {             34
                          $scope.person = person;
                      }
                  });                                                                                35
                  4. url

                  url选项可以给应用程序的状态分配一个唯一的URL。这个url选项提供了与深度链接同样的                                       36
   354   355   356   357   358   359   360   361   362   363   364