Ahora que he encontrado una manera de inicializar Google Maps con la ayuda de Andy Joslin en este SO initialize-google-map-in-angularjs, estoy buscando una manera de cargar asincrónicamente un objeto Google Map.¿Cómo cargar asincrónicamente un mapa de Google en AngularJS?
Encontré un ejemplo de cómo hacerlo en el proyecto phonecat.
Observe cómo los archivos JS se cargan en este ejemplo: index-async.html
En mis guiones Jade parciales que se carga en mi programa Traté:
script(src='js/lib/angular/angular.js')
script(src='js/lib/script/script.min.js')
script
$script([
'js/lib/angular/angular-resource.min.js',
'js/lib/jquery/jquery-1.7.2.min.js',
'http://maps.googleapis.com/maps/api/js?key=AIzaSyBTmi_pcXMZtLX5MWFRQgbVEYx-h-pDXO4&sensor=false',
'js/app.js',
'js/services.js',
'js/controllers.js',
'js/filters.js',
'js/directives.js',
'bootstrap/js/bootstrap.min.js'
], function() {
// when all is done, execute bootstrap angular application
angular.bootstrap(document, ['ofm']);
});
Cuando hago esto y voy a cargar el página del mapa me sale:
A call to document.write() from an asycrononously-loaded
external script was ignored.
Así es como Google Maps se carga ahora como un servicio: 012
'use strict';
var app = angular.module('ofm.services', []);
app.factory('GoogleMaps', function() {
var map_id = '#map';
var lat = 46.87916;
var lng = -3.32910;
var zoom = 15;
var map = initialize(map_id, lat, lng, zoom);
return map;
});
function initialize(map_id, lat, lng, zoom) {
var myOptions = {
zoom : 8,
center : new google.maps.LatLng(lat, lng),
mapTypeId : google.maps.MapTypeId.ROADMAP
};
return new google.maps.Map($(map_id)[0], myOptions);
}
Parece que esto debería devolver una promesa por lo que recuerdo haber leído. Pero este AngularJS es muy nuevo para mí.
Para promover el progreso en esto. Creé un proyecto de git aquí: https://github.com/LarryEitel/angular-google-maps Y lo presenté en vivo aquí: http://angular-google-maps.nodester.com/. Comencé un hilo en Grupos de Google aquí: https://groups.google.com/forum/?fromgroups&nomobile=true#!topic/angular/CM8ewcWeTF4 –
Cuando carga la biblioteca de la API de Maps de forma asíncrona, * debe * proporcionar un función de devolución de llamada con el parámetro de consulta 'callback ='. De lo contrario, el cargador de la API usará 'document.write()' que no funciona desde una llamada asincrónica. La minibiblioteca en la respuesta [GFoley83] (http://stackoverflow.com/a/17396353/1202830) agrega este parámetro, por lo que puede funcionar en una situación de carga asincrónica como esta. –