2014-07-08 10 views
5

Ich versuche Google Orte automatische Vervollständigung arbeiten mit eckigen js. Hier ist jsfiddle - Das Modell wird nach dem'place_change'-Ereignis nicht aktualisiert. Es wird über die Änderung der Eingabe aktualisiert.Google platziert Autocomplete mit eckigen js

Im Folgenden finden Sie HTML-Code - HTML

<body ng-app="mapApp"> 
    <div ng-controller="MapController"> 
     <input id="from" type="text" ng-model="user.from" placeholder="Type Address" class="ng-pristine ng-valid" autocomplete="off"> 
     <input type="hidden" ng-model="user.fromLat"> 
     <input type="hidden" ng-model="user.fromLng"> 
      <p>{{user.from}} <br> {{'Latitude : ' + user.fromLat + ', Longitutde : ' + user.fromLng}}</p> 
    </div> 
</body> 

Java Script

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

mapApp.controller('MapController', function ($scope) { 
    $scope.user = {'from': '', 'fromLat': '', 'fromLng' : ''}; 
    var options = { 
     componentRestrictions: {country: "in"} 
    }; 
    var inputFrom = document.getElementById('from'); 
    var autocompleteFrom = new google.maps.places.Autocomplete(inputFrom, options); 
    google.maps.event.addListener(autocompleteFrom, 'place_changed', function() { 
     var place = autocompleteFrom.getPlace(); 
     $scope.user.fromLat = place.geometry.location.lat(); 
     $scope.user.fromLng = place.geometry.location.lng(); 
     $scope.user.from = place.formatted_address; 
    }); 
}); 
+0

Ihre jsFiddle Link scheint nicht – rob

+0

Updates JsFiddle zu arbeiten - http://jsfiddle.net/punchouty/cTD2a/6/ – Puja

+0

'var inputFrom = document.getElementById ('ab'); 'ist gegen Angular No Dom Manipulation von Controllern Best Practice, nicht wahr? Wie können wir dies mit einer Richtlinie erreichen? – sgimeno

Antwort

5

Sie müssen Winkel sagen, wenn das place_change Ereignis wird ausgelöst, so dass er weiß, wann das DOM zu aktualisieren. Sie können das tun, indem Sie $scope.$apply() aufrufen. zB:

google.maps.event.addListener(autocompleteFrom, 'place_changed', function() { 
     var place = autocompleteFrom.getPlace(); 
     $scope.user.fromLat = place.geometry.location.lat(); 
     $scope.user.fromLng = place.geometry.location.lng(); 
     $scope.user.from = place.formatted_address; 
     $scope.$apply(); 
    }); 
+0

Dank rob. Es funktionierte :) – Puja

Verwandte Themen