現在我已經在這個SO initialize-google-map-in-angularjs的Andy Joslin的幫助下找到了初始化Google地圖的方法,我正在尋找一種異步加載Google Map對象的方法。如何在AngularJS中異步加載谷歌地圖?
我找到了一個在phonecat項目中如何做到這一點的例子。
通知的JS文件是如何在這個例子中加載:index-async.html
在我玉腳本部分加載到我的節目,我試過:
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']);
});
當我做到這一點,去加載地圖頁面,我得到:
A call to document.write() from an asycrononously-loaded
external script was ignored.
這是怎麼了谷歌地圖現在正在加載爲服務:
'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);
}
看起來,這應該是從我記得讀到的回報承諾。但是這個AngularJS對我來說是非常新的。
要促進這方面的進展我在這裏創建了一個git項目:https://github.com/LarryEitel/angular-google-maps並推動它在這裏生活:http://angular-google-maps.nodester.com/。我在此處啓動了Google Groups中的一個主題:https://groups.google.com/forum/?fromgroups&nomobile=true#!topic/angular/CM8ewcWeTF4 –
當您異步加載Maps API庫時,您必須*提供使用'callback ='查詢參數的回調函數。否則,API加載器將使用'document.write()',它不會從異步調用中工作。 [GFoley83](http://stackoverflow.com/a/17396353/1202830)中的迷你庫的答案爲您添加了此參數,這就是爲什麼它可以在異步加載情況下工作的原因。 –