Как реализовать Google Map от AngularUI
Я пытался использовать модуль Google-карты AngularUI, но он не работал. Вместо создания нового модуля я пытался использовать его с моим основным модулем.
Я использовал ng-app="DSApp"
<script src="lib/angular/angular.js"></script>
<script src="lib/angular/angular-route.js"></script>
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
<script src="js/filters.js"></script>
<script src="js/directives.js"></script>
<script src="components/jquery/jquery.min.js"></script>
<script src="components/jquery/jquery.min.map"></script>
<script src="components/bootstrap/dist/js/bootstrap.min.js"></script>
//AngularUI files start here
<script src="components/angular-ui-utils/modules/event/event.js"></script>
<script src="components/angular-ui-map/src/map.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=onGoogleReady"></script>
<script type="text/javascript">
Я использовал функцию onGoogleReady в верхней части моего файла app.js и ввел зависимости в модуль DSApp, как показано ниже.
function onGoogleReady() {
//cause error -> Uncaught Error: [ng:btstrpd] App Already Bootstrapped with this Element
angular.bootstrap(document.getElementById("map"), ['DSApp']);
}
var DSApp = angular.module('DSApp', [
'ngRoute',
'DSFilters',
'DSServices',
'DSDirectives',
'DSController',
'ui.event',
'ui.map'
])
Наконец я использовал HTML, как показано ниже на моей странице index.html.
<div id="map" ng-controller="MapCtrl" >
<div ui-map="myMap" ui-options="mapOptions" class="map-canvas"></div>
</div>
И мой контроллер такой
.controller('MapCtrl', ['$scope', function MapCtrl($scope) {
$scope.mapOptions = {
center: new google.maps.LatLng(35.784, -78.670), //causer error -> TypeError: undefined is not a function
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
}])
Простите за длинный пост. Я нуб, поэтому я подумал, что совершил глупую ошибку, поэтому мне нужно предоставить свой код. Что я сделал не так? Заранее спасибо.
1 ответ
Этот ответ является догадкой без Plunk или JSFiddle
Причины ваших ошибок:
- Уже загружен: я предполагаю, что у вас есть
<html ng-app="DSApp">
в вашем HTML-файле. Когда AngularJS загружается, этоng-app
Атрибут говорит, что он автоматически загружает весь ваш документ. Это приводит к вашей ошибке "уже загружен". - Undefined не является функцией: когда Angular загружает документ, он пытается настроить ваш контроллер. Это происходит, скорее всего, до загрузки Карт Google. Таким образом,
google.maps
еще не определено, когда ваш контроллер выполняется.
Основываясь на этом ответе переполнения стека
Возможное решение:
Подключите ваш контроллер к другому модулю, который не загружается через ng-app
,
Я извлек это из исходного кода для демонстрации пользовательского интерфейса Angular UI.Map:
function onGoogleReady() {
console.log("Google maps api initialized.");
angular.bootstrap(document.getElementById("map"), ['DSApp.map']);
}
angular.module('DSApp.map', ['ui.map']).controller('MapCtrl', ['$scope', function ($scope) {
$scope.mapOptions = {
center: new google.maps.LatLng(35.784, -78.670),
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
}]);