1

我使用带有以下指令的谷歌地方自动完成。该指令工作正常,但是当我清除自动完成字段时,place_changed 事件不会触发。当用户删除自动完成框中的值时,我该怎么做才能确保它触发并清除该字段?

app.directive('googleplace', function() {
  return {
      require: 'ngModel',
      scope:{place : '='},
      link: function(scope, element, attrs, model) {
          var options = {
              types: []
          };
          scope.gPlace = new google.maps.places.Autocomplete(element[0], options);

          google.maps.event.addListener(scope.gPlace, 'place_changed', function() {

              scope.place = scope.gPlace.getPlace();

              scope.$apply(function() {
                  model.$setViewValue(element.val());
              });

          });
      }
  };
});
4

1 回答 1

0

谷歌地图文档说“获取地点信息”(https://developers.google.com/maps/documentation/javascript/places):

“当用户从附加到文本字段的预测中选择地方时,服务会触发 place_changed 事件。地方服务还返回一个 PlaceResult 对象,可以通过调用自动完成对象上的 getPlace() 来访问该对象。”

所以我明白,如果用户清除输入框,则返回任何预测,因为它是空白的,所以不会调用该事件。

如果您想从 DOM 读取值,那么您应该实现一个函数并将其添加到ngModelController变量的 $parsers 数组中,在您的情况下,命名为model

于 2013-08-05T10:34:37.147 回答