将数据从服务传递到角度控制器

时间:2015-12-03 11:30:29

标签: angularjs google-api

我在使用google API将数据从服务发送到控制器时遇到了一个小问题。任何人都可以看看下面的代码并给我一些建议吗? 注射很好,我没有看到任何错误。我做了几件事。 1.使用服务方法的正常绑定(例如getCurrentPos())。它将返回存储pos信息的对象 2. $ rootScope。$ broadcast 3. angular.copy()

//in the service--------
var position = new google.maps.LatLng(markers[i][1], markers[i][2]);

this.marker = new google.maps.Marker({
    position: position,
    map: map,
    title: markers[i][0],
    draggable: true,
    icon: '../img/png/shopper1.png'
});
var personMarker = this.marker;
this.marker.addListener('drag', function() {
  console.log('lat:'+personMarker.getPosition().lat()+' lng:'+personMarker.getPosition().lng());
  currentPos.lat = personMarker.getPosition().lat();
  currentPos.lng = personMarker.getPosition().lng();
  // myPos = personMarker.getPosition();
  myPos = [personMarker.getPosition().lat(), personMarker.getPosition().lng()];
  angular.copy(myPos, scope.currentPos); //not working
  console.log('scope.currentPos',scope.currentPos);
  // $rootScope.$broadcast('evtUpdateMyPos', { //tried but not working.
  //   'lat': personMarker.getPosition().lat(),
  //   'lng': personMarker.getPosition().lng()
  // });
  console.log("mypos:", myPos);

});

//in the controller-------
$scope.currentPos = [];
//Listen on a broadcast event
// $scope.$on('evtUpdateMyPos', function (event, myPos){
//   console.log('evtUpdateMyPos is fired.', myPos); //this logs here.
//   // $scope.currentPos = angular.copy(myPos); //this dos not help
//   // $scope.currentPos = myPos; //this does not hlep.

// })

1 个答案:

答案 0 :(得分:1)

在某些情况下,如果您尝试使用谷歌地图从外部库更新模型,则应将setter包装成以下内容:

$timeout(function(){
   myModel = 'Google.map.data'
});

$rootScope.$applyAsync(function(){ // this could also be $scope
   myModel = 'Google.map.data'
});

myModel可以是您的服​​务的属性或$ scope变量($ scope.myModel)