2015-12-03 5 views
1

У меня возникла небольшая проблема с отправкой данных из службы в контроллер с API Google. может ли кто-нибудь взглянуть на код ниже и дать мне несколько советов? Включение хорошее, и я не вижу никаких ошибок. Я пробовал несколько вещей. 1. нормальное связывание с использованием сервисного метода (например, getCurrentPos()). он возвращает объект, который хранит информацию поз 2. $ rootScope. $ вещать 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

В некоторых случаях, когда вы пытаетесь обновить модель из внешней библиотеки, как в вашем случае, используя карты Google, вы должны обернуть сеттер в чем-то вроде этого:

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

или

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

myModel может быть свойство вашей услуги или переменная $ scope ($ scope.myModel)

+0

Большое вам спасибо. смог решить это с вашего совета. – jhlosin

Смежные вопросы