Отладка: ng-click и несуществующие функции

15

Перед исправлением проблемы у меня был элемент (внутри HTML-шаблона) с ng-click, который вызывал несуществующую функцию.

Есть ли способ включить строгий режим (например, использовать строго в JS) или что-то подобное, чтобы увидеть подобные проблемы в консоли?

UPDATE: я пробовал также с $compileProvider.debugInfoEnabled(true) без успеха

  • 2
    Посмотрите на stackoverflow.com/questions/29155171/…
  • 0
    Можете ли вы добавить исходный код?
Показать ещё 4 комментария
Теги:

1 ответ

8
Лучший ответ

Короткий ответ: В vanilla AngularJS нет возможности сделать это, но это можно сделать с помощью взлома.

Длинный ответ: Выражения, используемые в директивах обработки событий DOM (например, ng-click, ng-keydown и ng-submit), скомпилированы Angular $parse. Вы можете видеть, где это происходит внутри кода для директивы события. Служба $parse включает в себя собственную реализацию lexer и parser, которые компилируют выражение в JavaScript.

Сгенерированный JavaScript содержит кучу проверок безопасности, чтобы предотвратить происходящее, например, ошибки, возникающие при использовании функций undefined. Кнопка с этим кодом:

<button ng-click="handleClick()">Click Me!<button>

В результате будет создан JavaScript для обработчика событий, который сделает что-то похожее на это:

if ($scope.handleClick != null) {
    return $scope.handleClick();
} else {
    return undefined;
}

Для удаления этой проверки тривиально изменить Angular. Я создал небольшой патч который удаляет предложение "if" , показанное выше, из сгенерированного JavaScript, поэтому он вызывает ошибки при попытке использовать функцию undefined.

  • 0
    Хороший ответ Джейсон

Ещё вопросы

Сообщество Overcoder
Наверх
Меню