2015-06-05 4 views
0

Можно ли определить, откуда был вызван фильтр, в случае исключения?Исправление исключений для угловых фильтров

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

angular.module('myModule', []) 
 
    .filter('myFilter', function() { 
 
    return function(val) { 
 
     // this fails if val is undefined 
 
     return val.something; 
 
    } 
 
    });

Моя мотивация:

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

+0

Попробуйте использовать или оператор по возвращении: returnreturn val.someValueThatMaySometimesBeUndefined || ложный; –

ответ

0

Вы можете добиться этого, украсив обработчик исключений.

angular.module('myModule').config([ 
           '$provide', function($provide) { 

     $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) { 
      return function(exception, cause) { 
       $delegate(exception, cause); 
       console.log(exception.toString()); 
       console.log(exception.fileName); 
       console.log(exception.lineNumber); 
      }; 
     }]); 

}]); 
+0

Я думаю, что вы на правильном пути, но я не смог заставить ваш пример работать. Вот моя попытка: https://jsfiddle.net/w34sx8ou/4/. Во всех моих попытках исключение.filename и lineNumber не определены В боковом стеке стеки, предоставляемые угловым 1.2, легче работать, чем те, которые предоставлены 1.4 – Haakondr

+0

. Я проверяю это. – nikhil

+0

В этом случае Exception.toString() - единственное, что дает соответствующую информацию. Я использую то же самое в контроллерах/службах/директивах и отлично работаю, и вся информация доступна. – nikhil

Смежные вопросы