Page 435 - AngularJS权威教程
P. 435

31.12  城市自动填充/自动完成    415


                  通过在 HomeController 中使用 UserService , 现在我们可以移除硬编码的值                                 19
             “CA/San_Francisco”,然后使用新的UserService对象返回的地址替换它。

                  // ...                                                                             20
                  .controller('MainController', function($scope, $timeout, Weather, UserService) {
                      // ...
                      $scope.user = UserService.user;
                      Weather.getWeatherForecast($scope.user.location).then(function(data) {         21
                          $scope.weather.forecast = data;
                      });
                      // ...                                                                         22
                  })
                  正如我们可以看到的那样,如果切换到设置视图,然后输入“NY/New_York”,可以看到天气
              会根据我们在设置页面中设置的地址发生改变,如图31-10所示。                                                        23

                                                                                                     24


                                                                                                     25


                                                                                                     26



                                                                                                     27


                                                                                                     28
                                                图31-10  纽约天气
                                                                                                     29
              31.12  城市自动填充/自动完成

                                                                                                     30
                  每次都需要输入一个符合Wunderground API风格的城市很不方便(经度/维度、城市和州、国
                                                                                   ①
              家代码,等等)。幸好,Wunderground API还为我们提供了一个autocomplete API 。
                                                                                                     31
                  无需要求用户知道具体城市的格式,我们可以提供一个列表,供用户选择。


                          为了保持简单性和灵活性,这里只会创建一个未加工的基于JavaScript的自动完                                   32
                         成,而不是使用插件,比如typeahead.js或者jQuery插件库。
                                                                                                     33
                  要做到这一点,我们要在<input>元素上创建一个指令,用来插入一个带建议地址的<ul>
              元素。
                                                                                                     34
                  .directive('autoFill', function($timeout) {
                      return {
                          restrict: 'EA',                                                            35
                          scope: {
                              autoFill: '&',
              ——————————                                                                             36
                 ① http://www.wunderground.com/weather/api/d/docs?d=autocomplete-api
   430   431   432   433   434   435   436   437   438   439   440