azovl
@azovl

Обновляем сервис из директивы в AngularJS?

Столкнулся с такой ситуацией:
Вообщем-то структура проекта достаточно простая. Есть директива которая при клике по кнопке должна увеличить количество очков пользователя на 1. Очки пользователя хранятся в сервисе (фабрика)'score'.
Очки отображаются через контроллер:
vm.score = score; // Где score - это сервис

ну и html:
<div class="indicator">
            <div class="scores" data-ng-bind="score.total"></div>
        </div>


Знаю что при изменении сервиса через директиву, Scope сервиса остается прежним. Следовательно вопросы:
1) Что в моей логике не правильно?
2) Где нужно хранить общедоступные значения?
3) В $rootScope или все таки в сервисе?
4) Как все таки обновить значение из директивы в сервисе, при этом сервис должен поменять свое значение также в контроллере?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@mmxdesign
Software Engineer
1. желательно должно быть так vm.score = scoreService.getScore();
2 Общие данные лучше хранить в сервисах так как они являются Singleton а значит имеют только одну сущность по всему приложению. И могут быть вызваны из любого места
3 Лучше в сервисах, rootScope использовать плохой тон и практика
4 Вот так можно сделать
scoreService имеет локальную переменную score и два метода getScore и setScore
Импортируете scoreService в директиву и в функции линк вызываете метод scoreService.setScore() которая увеличивает значение score.
Импортируете scoreService в контроллер и считываете значение scoreService.getScore()
Если нужно конкретное решение дайте знать но лучше понять логику чем конкретное решение
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы