Подтвердить что ты не робот

Angular JS $watch vs $on

Я хочу выполнить функцию внутри директивы, всякий раз, когда в родительской области есть изменение состояния.

Очевидным способом достижения этого является использование трансляций событий ($broadcast) и слушателей ($on).

Мне любопытно, если использование $watch является альтернативой трансляции событий. Если да, то как они сравниваются?

Насколько я понимаю, проверяемое выражение оценивается каждый цикл $digest. Итак, события более эффективны, чем часы?

4b9b3361

Ответ 1

Функция $watch используется для просмотра переменных в области. Наследование наложения позволяет также просматривать родительские переменные области охвата, так что это определенно способ пойти на ваш случай использования. Как вы правильно сказали, $on используется для просмотра событий, которые вы можете $broadcast для дочерних областей или $emit для родительских областей. Это дает вам гораздо больше контроля, но при кодировании может возникнуть больше ошибок, поскольку вы можете получить обновление переменной области с точки, которую вы не отслеживаете и забываете уведомить слушателей.

Вы все еще можете использовать события, когда вы не наследуете переменные области. Но будьте осторожны, чтобы не загрязнять большой объем, использование сервисов может быть вариантом там, потому что вы сразу видите, будет ли оно введено или нет.

Так как директива получает область, в которой она находится (или наследуется от нее), я бы сказал, что $watch здесь намного более чистый вариант.

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