Wie lade ich eine Google-Karte in AngularJS asynchron?

Jetzt habe ich einen Weg gefunden, Google Maps mit Hilfe von zu initialisierenAndy Joslin in diesem SOinitialisiere-google-map-in-angularjsIch suche nach einer Möglichkeit, ein Google Map-Objekt asynchron zu laden.

Ich habe ein Beispiel dafür im Internet gefundenTelefonkatze Projekt.

Beachten Sie, wie die JS-Dateien in diesem Beispiel geladen werden:index-async.html

In meinem Jade-Skript-Teil, der in mein Programm geladen ist, habe ich versucht:

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']);
    });

Wenn ich dies tue und die Kartenseite lade, erhalte ich:

A call to document.write() from an asycrononously-loaded 
external script was ignored.

So wird Google Maps jetzt als Dienst geladen:

'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);
}

Es scheint, dass dies ein Versprechen von dem sein sollte, woran ich mich erinnere. Aber dieser AngularJS ist für mich sehr neu.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage