#angularjs
#angularjs
Вопрос:
У меня есть сервис в Angular, в котором есть один метод — скажем, getName(), который возвращает чье-то имя
Я хочу, чтобы в моем html можно было делать что-то вроде {{ $scope .getName() }} и привязать это к результату моего метода. Моя главная проблема заключается в том, что если имя в моей службе изменится (через другой контроллер), то я хотел бы, чтобы мой {{….. }} изменился.
Надеюсь, в этом есть смысл.
С уважением, Яннис
Ответ №1:
Вы не можете привязать динамические вызовы службы к элементу DOM.
Вероятно, лучшим способом было бы $watch
изменить имя внутри службы и использовать функцию обратного вызова при изменении. Вам также понадобится способ уведомить контроллер об изменении имени, поэтому также следует настроить прослушиватель событий. Слушатель вызовет функцию, которая, скажем, обновит переменную области $scope.nameFromService
видимости . И тогда в вашем HTML вам понадобится только это внутри части контроллера:
{{nameFromService}}
Опять же, чтобы было понятно, вот что происходит:
- другой контроллер изменяет значение в службе
$watch
запускается и вызывает функцию, которая (среди прочего) запускает событие- прослушиватель событий в вашем контроллере получает событие и обновляет переменную области видимости
- Angular автоматически обновляет DOM
Обновить
Если вы можете изменить свой сервис, я бы на самом деле избежал всего $watch
этого и просто изменил функцию установки имени, чтобы она запускала событие при вызове. Таким образом, все ваши контроллеры могут знать об изменениях имени.
Комментарии:
1. Так что в основном используйте .on и .emit? Но затем я связываю свой сервис (который выдает) с моим контроллером (который выполняет включение), что на самом деле не очень здорово.
2. Не обязательно, что ваш сервис отправит сообщение, но ему все равно, кто его получит.