Я использую угловые js, и я пытаюсь поймать все ошибки на всех страницах, но проблема в том, что он не улавливает ошибки на всех страницах, например, я делаю ReferenceError в одном из контроллеров, и он этого не понимает.
$rootScope.$on("$stateChangeStart", function() {
window.onerror = function( msg, url, line, col, error ) {
var extra = !col ? '' : '\ncolumn: ' + col;
extra += !error ? '' : '\nerror: ' + error;
var data = {
msg : msg,
url : url,
line: line + extra
}
alert('error');
var suppressErrorAlert = true;
return suppressErrorAlert;
};
}
Как я могу сделать эту работу?
Не используйте window.onerror, вместо этого используйте $ exceptionHandler. Угловая имеет глобальную фабрику $ exceptionHandler, которая ловит ошибки, которые происходят внутри контроллеров, служб и т.д.
Любое неперехваченное исключение в угловых выражениях делегируется этой службе.
angular.module('exceptionOverride', []).factory('$exceptionHandler',
function() {
return function(exception, cause) {
exception.message += ' (caused by "' + cause + '")';
throw exception;
};
});
Этот пример переопределит нормальное действие $ exceptionHandler, чтобы исключить угловые исключения, если они произойдут, а не просто войти в консоль.
Дополнительная информация: https://docs.angularjs.org/api/ng/service/ $ exceptionHandler
Хорошее сообщение в блоге: http://blog.loadimpact.com/blog/exception-handling-in-an-angularjs-web-application-tutorial/