Привязать метод обслуживания к моему интерфейсу — Angular

#angularjs

#angularjs

Вопрос:

У меня есть сервис в Angular, в котором есть один метод — скажем, getName(), который возвращает чье-то имя

Я хочу, чтобы в моем html можно было делать что-то вроде {{ $scope .getName() }} и привязать это к результату моего метода. Моя главная проблема заключается в том, что если имя в моей службе изменится (через другой контроллер), то я хотел бы, чтобы мой {{….. }} изменился.

Надеюсь, в этом есть смысл.

С уважением, Яннис

Ответ №1:

Вы не можете привязать динамические вызовы службы к элементу DOM.

Вероятно, лучшим способом было бы $watch изменить имя внутри службы и использовать функцию обратного вызова при изменении. Вам также понадобится способ уведомить контроллер об изменении имени, поэтому также следует настроить прослушиватель событий. Слушатель вызовет функцию, которая, скажем, обновит переменную области $scope.nameFromService видимости . И тогда в вашем HTML вам понадобится только это внутри части контроллера:

 {{nameFromService}}
 

Опять же, чтобы было понятно, вот что происходит:

  • другой контроллер изменяет значение в службе
  • $watch запускается и вызывает функцию, которая (среди прочего) запускает событие
  • прослушиватель событий в вашем контроллере получает событие и обновляет переменную области видимости
  • Angular автоматически обновляет DOM

Обновить

Если вы можете изменить свой сервис, я бы на самом деле избежал всего $watch этого и просто изменил функцию установки имени, чтобы она запускала событие при вызове. Таким образом, все ваши контроллеры могут знать об изменениях имени.

Комментарии:

1. Так что в основном используйте .on и .emit? Но затем я связываю свой сервис (который выдает) с моим контроллером (который выполняет включение), что на самом деле не очень здорово.

2. Не обязательно, что ваш сервис отправит сообщение, но ему все равно, кто его получит.