2013-02-18 43 views
3

我想使用谷歌地圖的指令是這樣的:AngularUI - 谷歌地圖 - 地圖是未定義

控制器方法

$scope.myMarkers = []; 

$scope.mapOptions = { 
    center : new google.maps.LatLng(35.784, -78.670), 
    zoom : 15, 
    mapTypeId : google.maps.MapTypeId.ROADMAP 
}; 

$scope.addMarker = function($event) { 
    $scope.myMarkers.push(new google.maps.Marker({ 
     map : $scope.myMap, 
     position : $event.latLng 
    })); 
}; 

UpdateLocation.html

<div ng-repeat="marker in myMarkers" ui-map-marker="myMarkers[$index]" ui-event="{'map-click': 'openMarkerInfo(marker)'}"></div> 

<div id="map_canvas" ui-map="myMap" class="map" ui-event="{'map-click': 'addMarker($event)'}" ui-options="mapOptions"></div> 

地圖顯示完美,但在方法addMarker我得到一個undefined當0執行。

回答

3

我相信你的控制器定義和ui-map div之間有一個新的範圍被創建,發生的事情是'myMap'屬性是在該範圍上創建的,而不是在你的控制器範圍內創建的。

爲避免此類問題,請提供ui-map指令的適當模型。例如:

控制器:

$scope.model = { myMap: undefined }; 

HTML:

<div id="map_canvas" ui-map="model.myMap" class="map" ui-event="{'map-click': 'addMarker($event)'}" ui-options="mapOptions"></div> 

這將迫使ui-map指令到地圖內容店內$scope.model.myMap並且由於範圍的prototypically遺傳,$scope.model對象將在子範圍上可用,但始終屬於父範圍 - 控制器的範圍。

+0

工作!非常感謝你!!我浪費了很多時間來解決這個問題。但我不明白新範圍的創建地點。正如文檔所述,我正在使用angular-ui – qopuir 2013-02-18 15:42:05