我目前正試圖獲得一個簡單的應用程序啓動並運行,它使用NgMap在美國地圖上覆蓋自定義多邊形。我一直在關注這個例子NgMap Simple Polygon。與這個例子相比,我將最大的區別是我最終將轉換爲從本地json文件中提取數據。這是我的控制器代碼和我的html代碼。形狀對象未定義爲ng-map
(function() {
var app = angular.module("testApp", ['ngMap']);
app.controller("MapController", MapController);
MapController.$inject = ['$scope', '$timeout', '$http', '$window', 'NgMap'];
function MapController($scope, $timeout, $http, $window, NgMap) {
$scope.eastern = getRegionInfo("eastern");
$scope.florida = [];
$scope.gateway = [];
$scope.metroNortheast = [];
$scope.midAmerica = [];
$scope.midWest = [];
$scope.newEnglad = [];
$scope.northern = [];
$scope.southern = [];
$scope.southwest = [];
$scope.western = [];
var easternRegion = new google.maps.Polygon({
});
function getRegionInfo(region) {
$http.get("data/regions.txt").success(function (data) {
$scope[region] = data[region];
})
};
};
})();
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="description" content="Simple Map">
<meta name="keywords" content="ng-map,AngularJS,center">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script src="./libraries/angularjs/angular.js">
</script><script src="http://maps.google.com/maps/api/js?key=AIzaSyCi1Dh2ssMKOEwzvOWtDOfQA2gtKMK_yBM&libraries=placeses,visualization,drawing,geometry,places"></script>
<script src="./views/MapController.js"></script>
<script src="./libraries/bootstrap/js/ui-bootstrap-tpls-2.0.0.js"></script>
<script src="./libraries/ng-map.js"></script>
<link href="./libraries/bootstrap/css/bootstrap.css" rel="stylesheet">
<title>Test</title>
</head>
<body ng-app="testApp">
<div ng-controller="MapController as App">
<ng-map center="[40.74, -74.18]"
map-type-id="TERRAIN">
<shape name="easternRegion"
paths="[
[25.774252, -80.190262],
[18.466465, -66.118292],
[32.321384, -64.75737],
[25.774252, -80.190262]
]"
stroke-color="#FF0000"
stroke-opacity="0.8"
stroke-weight="2"
fill-color="#FF0000"
fill-opacity="0.35">
</shape>
</ng-map>
</div>
</body>
</html>
可悲的是,當我運行當前的代碼,我收到在控制檯此錯誤。
TypeError: Cannot read property 'id' of undefined at __MapController.vm.addObject (http://localhost:64080/libraries/ng-map.js:67:30) at linkFunc (http://localhost:64080/libraries/ng-map.js:2084:21) at invokeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:9694:9) at nodeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:9093:11) at compositeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:8397:13) at nodeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:9088:24) at compositeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:8397:13) at nodeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:9088:24) at compositeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:8397:13) at compositeLinkFn (http://localhost:64080/libraries/angularjs/angular.js:8400:13)
這是未定義對象導致錯誤的函數調用。
/**
* Add an object to the collection of group
* @memberof __MapController
* @function addObject
* @param groupName the name of collection that object belongs to
* @param obj an object to add into a collection, i.e. marker, shape
*/
vm.addObject = function(groupName, obj) {
if (vm.map) {
vm.map[groupName] = vm.map[groupName] || {};
var len = Object.keys(vm.map[groupName]).length;
vm.map[groupName][obj.id || len] = obj;
if (vm.map instanceof google.maps.Map) {
//infoWindow.setMap works like infoWindow.open
if (groupName != "infoWindows" && obj.setMap) {
obj.setMap && obj.setMap(vm.map);
}
if (obj.centered && obj.position) {
vm.map.setCenter(obj.position);
}
(groupName == 'markers') && vm.objectChanged('markers');
(groupName == 'customMarkers') && vm.objectChanged('customMarkers');
}
}
};
看來,在形狀標籤的內容沒有被正確解析?我不確定在這裏做什麼。有關這個問題的任何見解?謝謝!