2016-07-16 67 views
2

這句法從ngMap https://github.com/allenhwkim/angularjs-google-maps採取NgMap參考正常工作:進入內部角控制器

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: Cannot read property 'getMap' of undefined

它在下面進一步失敗:

NgMap.getMap().then(function (map) {

控制器聲明爲:

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 $注入= NgMap控制器申報等之前,但它給出了一個類似的錯誤上面因爲NgMap不能被引用。

編輯:ngMap依賴關係是在另一個類似於答案的文件中設置的。對不起,我沒有提前,但上面的代碼工作和不工作在一起在同一個地方,所以我認爲這似乎可以離開原來的。

var app = angular 
.module('trails', ['ngMaterial', 'md.data.table', 'ngRoute', 'ngMap']) 

我不知道這是我錯誤地試圖使用NgMap該控制器聲明或東西NgMap ...或最有可能我與任何框架缺乏經驗注入的方式做!

回答

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; 
    }); 
}); 
+0

沒有運氣引用vm.map或在我的情況self.map。錯誤仍然是「Can not read property'getMap'of undefined」,所以看起來NgMap並非像這樣聲明控制器函數的「注入」。 – Steve

+0

.controller('ActivityDetailsController','$ mdSidenav','$ mdBottomSheet','$ timeout','$ log','$ http','$ location','$ routeParams','NgMap', ActivityDetailsController ]) – Abcd

+0

你得到了它Abcd,'NgMap'周圍的引號也需要在這裏(我總是嘗試),愛你的工作!任何想法爲什麼? – Steve

1

您忘記了添加ngMap依賴關係。

聲明你的模塊是這樣的:

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

,它應該工作。

+0

感謝您的回答。我實際上已經有了,因爲一種方法有效,而另一種則不行。我現在更新了這個問題來包含它,所以更明顯。乾杯。 – Steve