Если у меня есть ng-click, вот так: нг-клик = "багги()" и на консоли не появляется сообщение об ошибке.
Это немного сложно отладить.
Почему не генерируются сообщения об ошибках? Что я могу сделать?
Если у меня есть ng-click, вот так: нг-клик = "багги()" и на консоли не появляется сообщение об ошибке.
Это немного сложно отладить.
Почему не генерируются сообщения об ошибках? Что я могу сделать?
На самом деле, это не что-то особенное с ng-click
, это поведение по умолчанию выражений Angular.
buggy()
не оценивается с помощью обычного javascript. Он оценивается с помощью $parse
.
$parse
оценивает выражения и возвращает функцию, которая будет работать против области.
$parse
регистрировать ошибки только в том случае, если выражение недействительно.
Angular оценка выражения прощает, я не могу придумать никакого способа передать ее.
Обоснование выражений Angular для прощения undefined и null связано с привязкой данных. Связанные переменные изначально могут быть undefined или null, когда они скомпилированы в DOM-один действительно ясный пример, когда связанная переменная зависит от обещания. Команда Angular решила, что вместо появления сообщений об ошибках до тех пор, пока это обещание не будет разрешено, было бы лучше продолжать тихо.
Из руководства Angular для выражений:
Имеет смысл показать ничего, кроме как исключить исключение, если a undefined (возможно, мы ожидаем ответа сервера, и это будет скоро определиться). Если бы оценка выражения не прощала, мы бы должны писать привязки, которые загромождают код, например: {{((А || {}). Б || {}). С}}
См. также: https://groups.google.com/forum/m/#!topic/angular/HRVOUKEHLFw
Выражения - это фрагменты кода, подобные JavaScript, которые обычно помещаются в привязки, такие как {{expression}}. Выражения обрабатываются службой $parse. Выражения часто обрабатываются по почте с использованием фильтров для создания более удобного для пользователя формата.
Angular Выражения против выражений JS
Возможно, возникает соблазн думать о выражениях Angular как выражения JavaScript, но это не совсем правильно, поскольку Angular не использует JavaScript eval() для оценки выражений. Вы можете думать о выражениях Angular как выражения JavaScript со следующими отличиями:
Оценка атрибутов: оценка всех свойств зависит от области выполнения оценки, в отличие от JavaScript, где выражения вычисляются в глобальном окне.
Прощание: оценка выражения прощает undefined и null, в отличие от JavaScript, где попытки оценить свойства undefined могут генерировать ReferenceError или TypeError.
Нет команд управления потоком: вы не можете выполнить одно из следующих действий в выражении Angular: условные обозначения, циклы или выброс.