Як зупинити перегляд $ в AngularJS?


77

Я можу налаштувати $ watch на область AngularJS, щоб отримувати повідомлення, коли вираз, який мене цікавить, змінився. Але як я можу перестати дивитись, коли втрачу інтерес?

Відповіді:


144

При виклику $watchповертається функція, яка скасовує зв’язаний вираз.

Наприклад, щоб спостерігати, як змінна fooзмінюється лише один раз:

var unregister = $scope.$watch('foo', function () {
  // Do something interesting here ...
  unregister();
});

Сподіваюся, що це допоможе :-)


14
Просто для того, щоб це було зрозуміло: у наведеному вище прикладі зворотний виклик „відмінити” викликається з самої функції годинника. Це не повинно бути так, і код в іншому місці програми (тобто поза функцією перегляду) міг би із задоволенням викликати його, щоб забезпечити, щоб функція перегляду більше ніколи не викликалася.
занепадає

15
Ще одне зауваження: Коли ви реєструєте годинник, він запускається одразу одразу, а потім ще раз кожного разу, коли значення змінюється. Отже, точний код вище запустить функцію спостерігача один раз, а потім скасує її, перш ніж вона відреагує на будь-які зміни в foo. Трохи не в темі, але я зрозумів, що це варто згадати.
МВт.

21

Як додатковий коментар, але не відповідь - це той самий принцип і для вбивства слухачів подій.

var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) {
   //Do cool stuff with params, then kill it
   unregister();
};

Просто доповнення, яке, на мою думку, було б круто знати кожному ще ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.