2016-06-17 24 views
1

私はエラーを処理しようとしていますが、残念ながら私は成功しません。window.onerrorでJavaScriptエラーを処理する

window.onerror = function (msg, url, line, col, error) { 
    alert('error'); 
}; 
$timeout(() => errorrr); 

そして、私は、コンソール上のエラーを参照くださいながら:私のAngularJSアプリの 'RUN' 私はこのコードを書くには

ReferenceError: errorrr is not defined

を私は警告を得ることはありません...


私がアプリケーションの「実行」の外で同じコードを実行すると動作します。

なぜ/私はそれを修正できますか?


編集 角度使用して、私は$ rootScopeに

angular.module('app').factory('$exceptionHandler', function ($log, $rootScope) { 
    return function myExceptionHandler(exception, cause) { 
     $log.error(exception, cause); 
     $rootScope.errors.push({ 
      exception: exception, 
      cause: cause 
     }); 
    }; 
}); 

を取得することはできませんそれは

Circular dependency found: $rootScope <- $exceptionHandler <- $rootScope

をスローし、この工場内の$ rootscopeを取得する方法はあります?

+1

AngularJsは、独自のエラー処理ルーチンを持っています。 [$ exceptionHandler'のドキュメントを参照](https://docs.angularjs.org/api/ng/service/$exceptionHandler) –

+0

@MikeMcCaughan編集して、$ exceptionHandlerを使用しましたが、$ rootscopeを呼び出すことができません。何か案が? – Amit

+2

あなたは別の質問をしているように聞こえます...なぜ私は 'window.onerror'があなたが生成したエラーを拾っていないのか気づいていました。新しい質問がある場合は、最初にインターネットとスタックオーバーフローを検索し、何も見つからない場合は新しい質問をしてください。 –

答えて

2

質問のコメントに示唆されているように、angle自身の$exceptionHandlerを使用することが望ましいです。そのように、私は$injectorサービスを利用するために必要な、円形の注入に伴う問題を解決するには

angular.module('app').factory('$exceptionHandler', function ($log, $injector) { 
    return function myExceptionHandler(exception, cause) { 
     $log.error(exception, cause); 
     var $rootScope = $injector.get('$rootScope'); 
     $rootScope.errors.push({ 
      string: exception.toString(), 
      message: exception.message, 
      lineNumber: exception.lineNumber, 
      stack: exception.stack, 
      cause: cause 
     }); 
    }; 
}); 
関連する問題