【发布时间】:2016-10-05 20:47:32
【问题描述】:
我正在尝试从 URL 获取纬度和经度变量并将它们分配给 Google 地图的“中心”属性。我没有收到任何错误,但我提醒我的中心对象到屏幕上,“纬度”和“经度”都为空。
这是网页:http://alainwebdesign.ca/pl4#/49.2/-122.6
Javascript:
(function (window, ng) {
ng.module('app', ['uiGmapgoogle-maps', 'ui.router'])
.config(function ($stateProvider) {
$stateProvider.state('location', {
url: '/:lat/:lon',
templateUrl: 'searchRadius.html',
controller: 'MapsCtrl',
resolve: {
resolveMap: function (MapService, $stateParams) {
return MapService.getData($stateParams.lat, $stateParams.lon);
}
}
});
})
.config(['uiGmapGoogleMapApiProvider', function (GoogleMapApi) {
GoogleMapApi.configure({
key: 'AIzaSyCbRPhVlxgVwBC0bBOgyB-Dn_K8ONrxb_g',
v: '3',
libraries: 'weather,geometry,visualization'
});
} ])
.controller('MapsCtrl', ['$scope', "uiGmapLogger", "uiGmapGoogleMapApi", "$interval", "$state", "$stateParams",
function ($scope, $log, GoogleMapApi, $interval, $state, $stateParams) {
$log.currentLevel = $log.LEVELS.debug;
var center = { latitude: parseFloat($stateParams.lat), longitude: parseFloat($stateParams.lon) };
alert(JSON.stringify(center));
//Object.freeze(center); caused TypeError: Cannot assign to read only property ('latitude') ...
console.log($stateParams);
$scope.map = {
center: center,
pan: false,
zoom: 16,
refresh: false,
events: {},
bounds: {}
};
$scope.map.circle = {
id: 1,
center: center,
radius: 500, //(current time - date lost)*km/hour
stroke: {
color: '#08B21F',
weight: 2,
opacity: 1
},
fill: {
color: '#08B21F',
opacity: 0.5
},
geodesic: false, // optional: defaults to false
draggable: false, // optional: defaults to false
clickable: true, // optional: defaults to true
editable: false, // optional: defaults to false
visible: true, // optional: defaults to true
events: {
dblclick: function () {
$log.debug("circle dblclick");
},
radius_changed: function (gObject) {
var radius = gObject.getRadius();
$log.debug("circle radius radius_changed " + radius);
}
}
}
//Increase Radius:
$interval(function () {
$scope.map.circle.radius += 30; //dynamic var
$state.transitionTo('location', { //location is the state name
center: $stateParams.center,
radius: $scope.map.circle.radius
},
{
notify: false
});
}, 1000); //end of interval function
} ]); //end of controller
})(window, angular);
searchRadius.html:
<div style="height: 100%"> <!--took out: ng-if="map.center !== undefined"-->
<ui-gmap-google-map
center='map.center'
zoom='map.zoom'
draggable='map.draggable'
dragging='map.dragging'
refresh='map.refresh'
options='map.options'
events='map.events'
pan='map.pan'>
<ui-gmap-circle
center='map.circle.center'
radius='map.circle.radius'
fill='map.circle.fill'
stroke='map.circle.stroke'
clickable='map.circle.clickable'
draggable='map.circle.draggable'
editable='map.circle.editable'
visible='map.circle.visible'
events='map.circle.events'>
</ui-gmap-circle>
</ui-gmap-google-map>
</div>
index.html:
<!DOCTYPE html>
<html ng-app="app">
<head>
<link rel="stylesheet" href="example/assets/stylesheets/example.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="website_libs/dev_deps.js"></script>
<script src="https://code.angularjs.org/1.3.6/angular.js"></script>
<script src="dist/angular-ui-router.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.underscore.js"></script>
<script src="http://cdn.rawgit.com/nmccready/angular-simple-logger/0.0.1/dist/index.js"></script><script src="dist/angular-google-maps_dev_mapped.js"></script>
<script src="getLoc.js"></script>
<script src="searchRadius.js"></script>
<script src='//maps.googleapis.com/maps/api/js?key=AIzaSyD_g7xCYEi-U54SYfTXQ_lukRsChkWgjXQ'></script>
<title>Pet Locate</title>
<!--NEW STUFF FROM TOM-->
</head>
<body style="height: 100%">
<ui-view></ui-view>
</body>
</html>
【问题讨论】:
-
您是否尝试记录
$stateParams?尝试删除parseFloat()? -
@charlietfl 是的,我已经在记录 $stateParams(它在 searchradius.js 的一半左右)并且刚刚尝试取出 parseFloat() 并导致“找不到有效的中心属性”错误。
-
在你的状态路由配置中,添加这个
return MapService.getData($stateParams.lat, $stateParams.lon).then(function(rsp){ console.log(rsp); return rsp; }).catch(function(err){console.log(err);})。看看这是否说明了什么。也只是为了咯咯笑,控制台也将 $stateParams 记录在该块中,以确保您没有那么远的错误。 -
也只是一个 FYI,你没有将
resolveMap作为可注入的对象传递给你的控制器。 -
@jusopi 我在 .config 的解析函数中添加了该代码,但它没有做任何事情(或将任何内容记录到控制台)。感谢您的建议,将其作为可注射添加到我的控制器中,我是否只需执行以下操作: .controller('MapsCtrl', ['resolveMap', ...]
标签: javascript angularjs state