【发布时间】:2014-04-28 12:26:08
【问题描述】:
在我的应用程序中,我有一个“地图”来显示和处理地图上的内容。 CtrlMap 控制器显示地图并显示标记。 watchPosMap 监视位置变化。第三有一个名为markerService 的服务,它保存标记的属性(位置)。
结构看起来是这样的。
[CtrlMap] <-> [MarkerService] <- [watchPosMap]
这是服务:
MyMapApp.service('MarkerService', function () {
//set initial marker if no one exists
if (property == undefined)
{
var property = {
latitude: 44.49,
longitude: -108.42};
}
return {
getP: function () {
return property;
},
setP: function(lat,lng) {
consolie.info('Have new marker properties:', lat,lng);
property = {
latitude: lat,
longitude: lng};
}
};
});
在启动时,CtrlMap 控制器以这种方式获取默认标记设置:$scope.marker = MarkerService.getP()。效果很好。
如果设备的位置发生变化,watchPosMap 包含一个带有回调的navigator.geolocation.watchPosition 方法,该方法调用服务MarkerService 以设置新的标记参数。
这是我的watchPosMap 控制器:
MyMapApp.controller('watchPosMap', ['$scope', 'MarkerService', function($scope) {
$scope.watchMyPositionChangesID =
navigator.geolocation
.watchPosition(function(data) {
mapScope=angular.element(document.getElementById('id_map'))
.scope();
angular.element(document.getElementById('id_map'))
.injector().get("MarkerService")
.setP(data.coords.latitude,data.coords.longitude);
mapScope.$apply();
},
function(e){$scope.errorMsg=e;},
{ timeout: 30000 }
);
}]);
设置标记属性有效,但视图未更新。有什么事情可以触发视图更新吗?
【问题讨论】:
标签: javascript angularjs google-maps-api-3 angularjs-service angularjs-controller