Этот синтаксис взят из ngMap https://github.com/allenhwkim/angularjs-google-maps нормально работает:
angular
.module('trails')
.controller('MyController', function (NgMap) {
NgMap.getMap().then(function (map) {
console.log(map.getCenter());
console.log('markers', map.markers);
console.log('shapes', map.shapes);
});
});
Но синтаксис, который я использую для объявления контроллеров, отличается, и я получаю сообщение об ошибке:
angular.js: 13642 TypeError: невозможно прочитать свойство getMap неопределенного
Он терпит неудачу в строке, как показано ниже:
NgMap.getMap().then(функция (карта) {
Контроллер объявлен как:
angular
.module('trails')
.controller('ActivityDetailsController', [
'$mdSidenav', '$mdBottomSheet', '$timeout', '$log', '$http', '$location', '$routeParams',
ActivityDetailsController
]);
function ActivityDetailsController($mdSidenav, $mdBottomSheet, $timeout, $log, $http, $location, $routeParams, NgMap) {
var self = this;
$http.get('/activity/detailStats/' + $routeParams.id, {
params: { max: "1000" }
})
.success(function (data) {
self.stats = data.stats;
// Zoom to fit
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < self.stats.activityTrackPoints.length; i++) {
var latlng = new google.maps.LatLng(self.stats.activityTrackPoints[i][0], self.stats.activityTrackPoints[i][1]);
bounds.extend(latlng);
}
NgMap.getMap().then(function (map) {
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
});
})
.error(function (data, status) {
console.error('https error', status, data);
})
.finally(function () {
});
Я пытался добавить NgMap в другие очевидные места, например:
...'$routeParams', NgMap,
ActivityDetailsController...
или выполнение ActivityDetailsController.$inject = NgMap перед объявлением контроллера и т. д., но это дает аналогичную ошибку, указанную выше, в том, что на NgMap нельзя ссылаться.
Изменить: зависимость ngMap была настроена в другом файле, похожем на ответы. Извините, я не поместил это раньше, но приведенный выше код, который работает и не работает, находится в одном и том же месте вместе, поэтому я подумал, что изначально было нормально оставить это.
var app = angular
.module('trails', ['ngMaterial', 'md.data.table', 'ngRoute', 'ngMap'])
Я не уверен, связано ли это с тем, как я неправильно пытаюсь внедрить NgMap, используя это объявление контроллера, или что-то в NgMap... или, скорее всего, с моей неопытностью в любой из платформ!