2014-12-29 3 views
0

В течение последних двух часов я столкнулся со следующей проблемой, и я понятия не имею, как ее решить. Я делаю угловое приложение, которое использует директиву с угловыми указателями. Объект $ scope.center содержит позицию, которая первоначально просматривается на карте. Следующий фрагмент кода - это первые строки контроллера страницы, просматривающей карту. Все это хорошо работает.Директива по угловому контроллеру

angular.extend($scope, { 
    center: { 
     lat: 0, 
     lon: 0, 
     zoom: 1, 
     autodiscover: true 
    }, 
    layers: { 
     normal: { 
      type: 'Tile', 
      source: { 
       type: 'OSM' 
      } 
     } 
    } 
}); 

Однако, сейчас я пытаюсь обновить центральный объект с местом получили от геокодирования Google API. При нажатии на строку из результатов API Google называет следующие функции в контроллере:

$scope.gotoLocation = function(lat, lon) { 
    $log.log("called"); 
    $scope.center = { 
     lat: 50, 
     lon: 50, 
     zoom: 0 
    } 
} 

В моей консоли журнал строка «называется» появляется, но вид карты не меняется. Также, когда я печатаю $ scope.center в функции, исходный объект, который указан выше, печатается, тогда как этот объект изменился на мои текущие lat и lon, потому что для параметра автообнаружения установлено значение true. Я проверил это с помощью следующего кода:

<openlayers ol-controls="controls" ol-center="center" ol-layers="layers" ol-markers="markers"> 
    <ol-marker ng-repeat="marker in markers" lat="marker.lat" lon="marker.lon"></ol-marker> 
</openlayers> 

<form> 
    Latitude : <input type="number" step="any" ng-model="center.lat" /> 
    Longitude : <input type="number" step="any" ng-model="center.lon" /> 
    Zoom : <input type="number" step="any" ng-model="center.zoom" /> 
</form> 

Всех три поля показать мое текущее широчайшее и Лон, а также при изменении поля обновления карты положения (!). Я не знаю, почему изменение модели из самого шаблона действительно работает, а его изменение с контроллера не работает. Кто-нибудь может мне с этим помочь?

Ссылка на директиву: https://github.com/tombatossals/angular-openlayers-directive/blob/master/dist/angular-openlayers-directive.js

+0

Ну, можете ли вы попытаться воспроизвести проблему в плункер? Вот пустой шаблон для углового, чтобы вы начали: http://plnkr.co/edit/WprgipAdFBtxDKM6jogo?p=preview – SoluableNonagon

ответ

0

Это было связано с различными областями. Мое отображение карты было включено с помощью ng-view. Моя панель поиска была включена с помощью ng-include, поэтому у них были разные области. Я решил это с помощью фабрики.

0

Кажется, ваша переменная автообнаружения стирается. Это связано с автоматическим обновлением?

Попробуйте изменить функцию gotoLocation, чтобы обновить свойства, а не перезаписывать объект:

$scope.gotoLocation = function(lat, lon) { 
    $log.log("called"); 

    $scope.center.lat = 50; 
    $scope.center.lon = 50; 
    $scope.center.zoom = 0; 

} 
+0

Изначально установка автообнаружения на true делает директивный поиск для текущего lat и lon пользователя, заменяет текущий lon и lat объекта центра, а затем устанавливает автообнаружение на false. В конце концов, центральный объект будет выглядеть после того, как был загружен контроллер: центра: { Lat: , долготы: , трансфокатора: 1, автообнаружения: ложные }, Однако, когда я вхожу $ объема. центр из функции $ scope.gotoLocation остается в исходном состоянии. Я узнал, что автообнаружение изменяется на false, регистрируясь в директиве. – user2817219

+0

можете ли вы воспроизвести проблему в плункер? – SoluableNonagon

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