Получение ссылки на NgMap внутри контроллера Angular

Этот синтаксис взят из 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... или, скорее всего, с моей неопытностью в любой из платформ!


person Steve    schedule 16.07.2016    source источник


Ответы (2)


Вы забыли добавить зависимость ngMap.

Объявите свой модуль следующим образом:

angular.module('trails', ['ngMap'])

И это должно работать.

person developer033    schedule 16.07.2016
comment
Спасибо за Ваш ответ. У меня на самом деле это уже было, так как один способ работает, а другой нет. Я обновил вопрос, чтобы включить это сейчас, чтобы это было более очевидно. Ваше здоровье. - person Steve; 16.07.2016

person    schedule
comment
Не повезло со ссылкой на vm.map или, в моем случае, на self.map. Ошибка по-прежнему Cannot read property 'getMap' of undefined , поэтому похоже, что NgMap не вводит таким образом объявление функции контроллера. - person Steve; 16.07.2016
comment
.controller('ActivityDetailsController', ['$mdSidenav', '$mdBottomSheet', '$timeout', '$log', '$http', '$location', '$routeParams','NgMap', ActivityDetailsController]) - person Abcd; 16.07.2016
comment
Вы поняли Abcd, здесь также нужны кавычки вокруг «NgMap» (я пробовал без всегда), люблю вашу работу! Есть идеи, почему? - person Steve; 16.07.2016