2016-02-11 3 views
1

Мне нужно запустить программный код поиска угловых google-карт places_changed программным способом, вместо ручного нажатия на ввод. Как это сделать?Что такое синтаксис для запуска события поиска «places_changed» программно с помощью угловых карт Google?

Я попытался с помощью ванили решения ЯШ:

google.maps.event.trigger(searchbox, 'places_changed'); 

Но я не уверен, что для отправки в качестве первого параметра.

Это моя разметка:

<ui-gmap-google-map center='map.center' zoom='map.zoom' draggable="true" options="map.options" control="map.control"> 
    <ui-gmap-search-box template="searchbox.template" events="searchbox.events" position="'TOP_LEFT'"> 
    </ui-gmap-search-box> 
</ui-gmap-google-map> 

Это мой код контроллера:

$ scope.map = { центр: { широта: 45, долгота: -73 }, zoom: 8 }; $ scope.map.control = {}; $ scope.map.options = { scrollwheel: true };

var events = { 
     places_changed: function(searchBox) { 
      console.log("Search Box :", searchBox.getPlaces()); 
      var location = searchBox.getPlaces(); 
      console.log("Location :", location[0].geometry.location["G"]); 
      var geoKeys = Object.keys(location[0].geometry.location); 
      console.log("Keys :", geoKeys); 
      $scope.map["center"]["latitude"] = location[0]["geometry"]["location"][geoKeys[0]]; 
      $scope.map["center"]["longitude"] = location[0]["geometry"]["location"][geoKeys[1]]; 
      uiGmapIsReady.promise(1).then(function(maps) { 
       $timeout(function() { 
        console.log("Map :", $scope.map.control.getGMap()); 
        console.log("Bounds :", $scope.map.control.getGMap().getBounds()); 
        if (location[0].geometry.viewport) { 
         $scope.map.control.getGMap().fitBounds(location[0].geometry.viewport); 
        } else { 
         $scope.map["zoom"] = 15; 
        } 
        var marker = [{ 
         coordinates: { 
          latitude: $scope.map["center"]["latitude"], 
          longitude: $scope.map["center"]["longitude"] 
         }, 
         title: location[0]["name"], 
         id: location[0]["id"], 
         icon: location[0]["icon"] 
        }]; 
        $scope.randomMarkers = marker; 
        console.log("Random Markers :", $scope.randomMarkers); 
       }); 
       console.info("Google Maps ready", $scope.map); 

      }); 
      //$scope.map.fitBounds(location[0].geometry.viewport); 
     } 
    } 

    $scope.searchbox = { 
     template: 'app/user/editProfile/map-search.html', 
     events: events 
    }; 

Теперь мне нужно, чтобы вызвать «places_changed» событие с помощью ng-click откуда-то на странице. Как это сделать?

Заранее спасибо.

ответ

1

Используйте это, чтобы вызвать событие ввода ключа в searchBox, и оно даст те же результаты. Редактировать 1 - google.maps.event.trigger доступен ПОСЛЕ того, как API Google был загружен с помощью углового. Это, как я его в своем собственном приложении:

uiGmapIsReady.promise(1).then(function(instances) { 
     instances.forEach(function(inst) { 
      // run the searchbox with the input provided 
      $timeout(function() { 
       var input = angular.element("#" + 'id_of_searchBox')[0]; 
       google.maps.event.trigger(input, 'focus') 
       google.maps.event.trigger(input, 'keydown', { 
        keyCode: 13 
       }); 
      }, 100); 
     }); 
    }); 
+0

Поскольку я использую угловую Google-карту службу Wraparound вместо того, чтобы непосредственно с помощью API Google, я неспособен получить доступ к google.maps.event объекта. – jackOfAll

+0

Вы не можете получить доступ к объекту google.maps.event из-за состояния гонки. Объект google загружается, даже если вы используете директиву угловых google-maps. Я редактировал код выше, чтобы вернуть обещание, когда карта google готова. Вам нужно ввести uiGmapIsReady в контроллер, чтобы он работал. – Porlune

 Смежные вопросы

  • Нет связанных вопросов^_^