2014-07-08 12 views
5

Staram się, aby miejsca autouzupełniania google działały z kątowym js. Oto jsfiddle - Model nie otrzymuje aktualizacji po zdarzeniu "miejsce_zmienienia". Jest aktualizowany o zmianę wejścia.Google umieszcza autouzupełnianie w kanciastym js

Poniżej jest kod html - 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

Twój jsFiddle link nie wydaje się działać – rob

+0

Aktualizacje JsFiddle - http://jsfiddle.net/punchouty/cTD2a/6/ – Puja

+0

'var inputFrom = document.getElementById ('z'); 'jest przeciwna manipulacjom typu Angular no dom z najlepszej praktyki kontrolerów, nieprawdaż? Jak możemy to osiągnąć za pomocą dyrektywy? – sgimeno

Odpowiedz

5

Trzeba powiedzieć kątowe gdy zdarzenie place_change pobiera opalane więc wie, kiedy należy zaktualizować DOM. Możesz to zrobić pod numerem $scope.$apply(). np:

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

Dzięki rob. Zadziałało :) – Puja

Powiązane problemy