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

Angularjs ng-click молчаливо ест ошибки

Если у меня есть ng-click, вот так:   нг-клик = "багги()" и на консоли не появляется сообщение об ошибке.

Это немного сложно отладить.

Почему не генерируются сообщения об ошибках? Что я могу сделать?

4b9b3361

Ответ 1

Angular выражения

На самом деле, это не что-то особенное с 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


Angular выражения:

Выражения - это фрагменты кода, подобные JavaScript, которые обычно помещаются в привязки, такие как {{expression}}. Выражения обрабатываются службой $parse. Выражения часто обрабатываются по почте с использованием фильтров для создания более удобного для пользователя формата.

Angular Выражения против выражений JS

Возможно, возникает соблазн думать о выражениях Angular как выражения JavaScript, но это не совсем правильно, поскольку Angular не использует JavaScript eval() для оценки выражений. Вы можете думать о выражениях Angular как выражения JavaScript со следующими отличиями:

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

  • Прощание: оценка выражения прощает undefined и null, в отличие от JavaScript, где попытки оценить свойства undefined могут генерировать ReferenceError или TypeError.

  • Нет команд управления потоком: вы не можете выполнить одно из следующих действий в выражении Angular: условные обозначения, циклы или выброс.