Created
September 24, 2013 16:37
-
-
Save victorb/6687484 to your computer and use it in GitHub Desktop.
Easy AngularJS Directive for Google Places Autocomplete
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var myApp = angular.module('myApp', []); | |
myApp.directive('googleplace', function() { | |
return { | |
require: 'ngModel', | |
link: function(scope, element, attrs, model) { | |
var options = { | |
types: [], | |
componentRestrictions: {} | |
}; | |
scope.gPlace = new google.maps.places.Autocomplete(element[0], options); | |
google.maps.event.addListener(scope.gPlace, 'place_changed', function() { | |
scope.$apply(function() { | |
model.$setViewValue(element.val()); | |
}); | |
}); | |
} | |
}; | |
}); | |
//myApp.factory('myService', function() {}); | |
function MyCtrl($scope) { | |
$scope.gPlace; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> | |
<div ng-app="myApp" ng-controller="MyCtrl"> | |
<div>Google Places Autocomplte integration in Angular</div> | |
<div>To Test, start typing the name of any Indian city</div> | |
<div>selection is: {{chosenPlace}}</div> | |
<div><input ng-model="chosenPlace" googleplace/></div> | |
</div> |
@Dhaval4241 You need to add the Google script to your index.html
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key={YOUR_API_KEY}&libraries=places&sensor=false"></script>
google
should now be avaiable in the window scope.
Helped me a lot. Thanks!
Can you help me out in binding places for specific 1 city only?
My current directive code is,
angular.module('testApp').directive('googlePlace', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, model) {
var southWest = new google.maps.LatLng(36.970298, -87.01993499999998);
var northEast = new google.maps.LatLng(42.5083379, -91.51307889999998);
var SyracruiseBounds = new google.maps.LatLngBounds(southWest, northEast);
var options = {
bounds: SyracruiseBounds,
types: ['address']
};
scope.gPlace = new google.maps.places.Autocomplete(element[0], options);
scope.gPlace.bindTo('bounds', map);
scope.gPlace.setOptions({ strictBounds: true });
google.maps.event.addListener(scope.gPlace, 'place_changed', function () {
var geoComponents = scope.gPlace.getPlace();
var latitude = geoComponents.geometry.location.lat();
var longitude = geoComponents.geometry.location.lng();
var addressComponents = geoComponents.address_components;
addressComponents = addressComponents.filter(function (component) {
switch (component.types[0].locality) {
case "Syracruse": // city
return true;
default:
return false;
}
}).map(function (obj) {
return obj.long_name;
});
addressComponents.push(latitude, longitude);
scope.$apply(function () {
scope.details = addressComponents; // array containing each location component
model.$setViewValue(element.val());
});
});
}
};
});
Hi, this helped me a lot. Thank you for sharing this. Just to get some more information on this, is it possible that using this directive, i can have two places in a form which has this directive defined? I tried attaching this directive to two input elements and it only works for one. Anything on this would be a great help. Thanks.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
when i am using this directive i getting error ReferenceError: google is not defined please give solution for that