0

У меня есть приложение в Кордове с угловым бутстрепом, носящим «deviceready».Включение карт Google после того, как данные были включены

У меня есть Google карты, связанные как так:

<script src="https://maps.googleapis.com/maps/api/js"></script>

Если приложение начинается с набора данных, чтобы выключить то, очевидно, сценарий будет отсутствовать.

Если пользователь включает данные, как я могу инициализировать карты Google? Должен ли я перезапустить приложение? Я попытался вставить скрипт через «документ», но в сообщении об ошибке было сказано, что это запрещено.

Любая помощь или советы будут очень приветствуются.

Приветствия

Dale

+0

вы можете загружать API JS API асинхронно, вставив скрипт в DOM. например см. http://stackoverflow.com/questions/16340529/loading-google-maps-asynchronously – duncan

+0

Да, это работает, поскольку он вводит скрипт в index.html, однако это заставляет вас иметь функцию обратного вызова также на той же странице - что означает у меня нет доступа к чему-либо в моей области webapp $, что и требуется. благодаря – Dezza

ответ

0

В основном этот код будет проверять, если загружены библиотеки Google Maps API при создании карты в пределах вашего углового контроллера и попытаться получить его, если нет.

//already loaded build the map 
if ($window.google && $window.google.maps) { 
    prepareMap(); 
} else { //not loaded 
    //create a promise object 
    var mapScriptPromise = getMapScript(); 
    mapScriptPromise.then(function(){ 
     prepareMap(); //now you can build the map 
    });  
} 

//create the hook for the file and return the deferred promise 
function getMapScript() { 
    var deferred = $q.defer(); 
    var script = document.createElement('script'); 
    //script callback 
    $window.initMap = function() { 
     deferred.resolve(); 
    } 
    script.src = "https://maps.googleapis.com/maps/api/js?sensor=true&callback=initMap"; 
    document.body.appendChild(script); 

    return deferred.promise;  
} 

//add your map settings here i.e. 
function prepareMap() { 
    var map = new google.maps.Map(mapCanvas, mapOptions); 
    ... 
} 
Смежные вопросы