Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularjs谷歌地图$location.search在自动完成地点更改后不会更改_Angularjs_Google Maps_Autocomplete_Location - Fatal编程技术网

angularjs谷歌地图$location.search在自动完成地点更改后不会更改

angularjs谷歌地图$location.search在自动完成地点更改后不会更改,angularjs,google-maps,autocomplete,location,Angularjs,Google Maps,Autocomplete,Location,初始请求url为http://localhost//map?lat=33.73060000952102&lng=-117.12635126323244 在我的项目中,我使用的是谷歌地图自动完成服务,该服务会自动填充带有地址预测的文本字段,一旦选择了地址,地图就会以该位置为中心。成功启动My place_changed事件侦听器,并成功调用My controllers setLocation函数。但是,地址栏中的URL不会用新的lat和lng参数值更新 如果我从ng调用$scope.getProj

初始请求url为http://localhost//map?lat=33.73060000952102&lng=-117.12635126323244 在我的项目中,我使用的是谷歌地图自动完成服务,该服务会自动填充带有地址预测的文本字段,一旦选择了地址,地图就会以该位置为中心。成功启动My place_changed事件侦听器,并成功调用My controllers setLocation函数。但是,地址栏中的URL不会用新的lat和lng参数值更新

如果我从ng调用$scope.getProjectsByCenter,在html中单击它就会工作。不知何故,事件链已就位\u已更改与$location.search的冲突

有人想知道为什么吗

角度:app.js

var app = angular.module('projectmapsApp', []);

app.controller('MainMapController', function($scope,$location){

   $scope.setLocation = function(lat,lng){
      $location.search('lat',lat);
      $location.search('lng',lng);
      console.log($location.search()); //This logs an object with the new lat and lng
   };

   $scope.getProjectsByCenter = function(){
      var center = getProjectsByCenter();
      $scope.setLocation(center.lat(),center.lng());
   };

});
香草:map.js

function initializeMap() {
   var map = new google.maps.Map(document.getElementById("map-canvas"), {
      center: {lat: 33.868670, lng: -117.796783}
   });
   var input = document.getElementById('place-search');
   var autocomplete = new google.maps.places.Autocomplete(input);

   autocomplete.addListener('place_changed', function() {
      var place = autocomplete.getPlace();
      if (!place.geometry) {
         return;
      }
      var lat = place.geometry.location.lat();
      var lng = place.geometry.location.lng();

      angular.element('#MainMapController').scope().setLocation(lat,lng);

   };
};

找到了答案$申请

我的设置位置现在如下所示:

$scope.setLocation = function(lat,lng){
   $location.search('lat',lat);
   $location.search('lng',lng);
   $scope.$apply();
};

这里有一篇很棒的文章:

有趣的是,在调用setLocation后,它不会更新地址,如果我调用,请单击调用getProjectsByCenter的链接,该链接现在已注释掉所有代码,因此它不会执行任何操作。地址将更新到我使用setLocation发送的位置。这意味着$location.search正在更改地址/url,但浏览器在我与DOM交互之前不会响应它。我想。