У меня есть функция "щелчка", связанная с пользовательской службой OpenLayers. Детали не важны, но я в основном генерирую объект JSON, когда был нажат вектор на карте. Вектор экспонируется через службу (которая вызывается пользовательской директивой).
Мой вопрос таков. Как лучший (самый аккуратный) способ привязать свойство, открытое через службу, и вызвал через директиву значение в моем ng-view? Пример кода ниже.
<h2>My Map</h2>
<p>A: {{selected.a}}</p> <!--This is what I want to do... -->
<p>B: {{selected.b}}</p> <!--This is what I want to do... -->
<p>C: {{selected.c}}</p> <!--This is what I want to do... -->
<div map-dir id="map" class="map"></div>
<script>
angular.module("app")
.controller("MainController", function($scope, openlayers){
openlayers.init();
/*
* Needs to update the $scope whenever openlayers.selected
* changes (could be any time after init())
*/
$scope.selected = openlayers.selected;
})
.service("openlayers", function(){
//Do some stuff
var activeVector = {a: null, b: null, c: null};
//Function called whenever a user clicks on a map
function updateActiveVector(a,b,c){
activeVector = {a: a, b: b, c: c};
}
return {
init: init,
selected: activeVector
};
});
</script>
Контроллеры! Это именно то, ради чего они родились. Просто добавьте зависимость к службе в контроллере, который у вас есть, а затем добавьте возврат из службы "openlayers" в область действия контроллера
так
.controller("MainController", function($scope){
//Do something
})
станет
.controller("MainController", function($scope, openlayers){
$scope.selected = openlayers.selected;
})
Вы также должны добавить контроллер на страницу, так что вам также нужно будет обновить html от
<h2>My Map</h2>
<p>Name: {{selected.name}}</p> <!--This is what I want to do... -->
<div map-dir id="map" class="map"></div>
к чему-то вроде
<h2>My Map</h2>
<div ng-controller="MainController">
<p>Name: {{selected.name}}</p> <!--This is what I want to do... -->
</div>
<div map-dir id="map" class="map"></div>
Затем это должно показать привязку, на которую вы надеялись.
{{selected.name}}
на{{selected}}
и он вывел это на экран:{name: null}
. .. Так что это работало все время, я просто не понимал, что это печатает нулевое значение! Разве я не чувствую себя глупо ...