Правильно привязанные значения изменены в сервисе AngularJS к представлению

0

У меня есть функция "щелчка", связанная с пользовательской службой 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>
Теги:
data-binding

1 ответ

0
Лучший ответ

Контроллеры! Это именно то, ради чего они родились. Просто добавьте зависимость к службе в контроллере, который у вас есть, а затем добавьте возврат из службы "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>

Затем это должно показать привязку, на которую вы надеялись.

  • 0
    Я пробовал это раньше, и это «не работало», но я просто попробовал снова и изменил его с {{selected.name}} на {{selected}} и он вывел это на экран: {name: null} . .. Так что это работало все время, я просто не понимал, что это печатает нулевое значение! Разве я не чувствую себя глупо ...
  • 0
    Какова ценность activeVector? мы предполагаем, что это объект, когда он присваивается 'selected' со свойством name, но, возможно, это строка?
Показать ещё 18 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню