В чем разница между AngularJS $window.alert() и Javascript alert()?

Кажется, что AngularJS $window.alert() и Javascript alert() одинаковы. При каких условиях мы должны использовать какой из них? Или вообще разницы нет?


person user781486    schedule 24.04.2014    source источник


Ответы (3)


Точно так же — глобальные методы в JavaScript (работающие в браузере) — это методы класса window. $window в AngularJS является псевдонимом для объекта window.

$window: ссылка на объект окна браузера.

Обратите внимание, что вы можете переопределить $window для своих тестов, но в обычном коде оба они одинаковы.

person Alexei Levenkov    schedule 24.04.2014

Разница в том, что в тестах вы можете имитировать объект $window, чтобы вместо использования реального предупреждения он переходил в console.log или что-то еще. Если ваш код вызывает оповещение напрямую, то нет возможности переопределить реальное оповещение, поэтому в ваших тестах вы увидите всплывающие оповещения всякий раз, когда ваш метод использует оповещение.

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

Вы не увидите разницы в вашем работающем коде (оба работают одинаково), но слабое связывание вашего кода, как это, окупается позже.

person xrd    schedule 24.04.2014

Они идентичны, потому что $window === window, если вы не переопределили это.

person Paul    schedule 24.04.2014
comment
Это не совсем то, что говорится в документах: В отличие от JavaScript, где имена по умолчанию соответствуют глобальным свойствам окна, выражения Angular должны явно использовать $window для ссылки на глобальный объект окна. Например, если вы хотите вызвать alert() в выражении, вы должны использовать $window.alert(). Это ограничение является преднамеренным. Это предотвращает случайный доступ к глобальному состоянию — распространенный источник незаметных ошибок. - person random_user_name; 24.04.2014
comment
@cale_b Верно, но маловероятно, что он переопределил $window, поэтому это ссылка на объект window. - person Paul; 24.04.2014
comment
Для меня описание в основном говорит о том, что мы думаем, что вы, программисты, не знаете, как правильно обращаться с окном. И мы создаем новый чистый $window объект для вашего беспорядка. Но @cale_b прав, похоже, они одинаковые - person ncubica; 24.06.2015