2

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 を誤って注入しようとしている方法と関係があるかどうかはわかりません...または、どちらかのフレームワークの経験がない可能性が高いです!

4

2 に答える 2

1
var app= angular.module('trails', ['ngMap']);
  app.controller('MyController', function($scope, $interval, NgMap) {
    var vm = this;
    NgMap.getMap().then(function(map) {
      vm.map = map;
    });
});
于 2016-07-16T07:05:55.287 に答える
1

ngMap依存関係を追加するのを忘れました。

モジュールを次のように宣言します。

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

そして、それはうまくいくはずです。

于 2016-07-16T04:55:23.653 に答える