Skip to content

Instantly share code, notes, and snippets.

@maxrevilo
Forked from neilsoult/LazyLoad.js
Last active October 20, 2015 15:45
Show Gist options
  • Save maxrevilo/9376148 to your computer and use it in GitHub Desktop.
Save maxrevilo/9376148 to your computer and use it in GitHub Desktop.
angular.module('gps-test').factory('googleMapsLoader',
function($window, $q, $timeout) {
"use strict"
var loaded = false,
listeners = [];
function load_script(params, api_base_url) {
var url = api_base_url || 'https://maps.googleapis.com/maps/api/js?',
params_ext = angular.extend({sensor:false}, params);
params_ext["callback"] = "googleMapsLoader_initialize";
var params_str = [];
angular.forEach(params_ext, function(val, key) {
params_str.push(key+"="+String(val));
});
var s = $window.document.createElement('script');
s.src = url + (params_str.join("&"));
$window.document.head.appendChild(s);
}
function lazyLoadApi(params, api_base_url) {
var deferred = $q.defer();
if(!loaded) {// Not loaded yet
if(listeners.length == 0) { //Load not initiated
$window.googleMapsLoader_initialize = function () {
//Resolve all promises
angular.forEach(listeners, function(deferred) {
deferred.resolve($window.google.maps);
});
loaded = true;
//Memory clean
listeners = undefined;
delete $window["googleMapsLoader_initialize"];
};
$timeout(function(){
load_script(params, api_base_url);
}, 0, false);
}
//Register promise
listeners.push(deferred);
} else { //Already loaded
deferred.resolve($window.google.maps);
}
return deferred.promise;
}
var googleMapsLoader = {
get: function(params, api_base_url) {
return lazyLoadApi(params, api_base_url);
}
};
return googleMapsLoader;
});
@maxrevilo
Copy link
Author

Usage

googleMapsLoader.get().then(function(googleMaps){
    console.log("Google Maps Loaded: ", googleMaps);
});

@l0lkina
Copy link

l0lkina commented Jan 9, 2015

thank you:)

@renanfranca
Copy link

Thank you man!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment