Ora che ho trovato un modo per inizializzare Google Maps con l'aiuto di Andy Joslin in questo SO initialize-google-map-in-angularjs, sto cercando un modo per caricare asincronicamente un oggetto Mappa di Google.Come caricare in modo asincrono una mappa google in AngularJS?
Ho trovato un esempio di come farlo nel progetto phonecat.
Notate come i file JS vengono caricati in questo esempio: index-async.html
Nei miei script Jade parziali che viene caricato nel mio programma ho provato:
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']);
});
Quando faccio questo e vado a caricare il mappa pagina ottengo:
A call to document.write() from an asycrononously-loaded
external script was ignored.
Questo è il modo di Google Maps viene caricato ora come un servizio:
'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);
}
Sembra che questo dovrebbe restituire una promessa da ciò che ricordo di aver letto. Ma questo AngularJS è molto nuovo per me.
Per promuovere i progressi su questo ho creato un progetto git qui: https://github.com/LarryEitel/angular-google-maps E l'ho spinto live qui: http://angular-google-maps.nodester.com/. Ho iniziato una discussione su Google Gruppi al seguente indirizzo: https://groups.google.com/forum/?fromgroups&nomobile=true#!topic/angular/CM8ewcWeTF4 –
Quando carichi la libreria API di Maps in modo asincrono, devi * fornire un funzione di callback con il parametro di query 'callback ='. Altrimenti il loader API userà 'document.write()' che non funziona da una chiamata asincrona. La mini-libreria nella risposta [GFoley83] (http://stackoverflow.com/a/17396353/1202830) aggiunge questo parametro per te, ed è per questo che può funzionare in una situazione di caricamento asincrona come questa. –