2013-05-10 70 views
2

對於我使用與https://github.com/angular/angular-seed非常相似的骨架的應用程序。如何在angularjs中正確覆蓋exceptionHandler?

我已經試過這樣的事情,在services.js:

'use strict'; 

/* Services */ 

angular.module('mApp.services', []). 
    factory('$exceptionHandler', function() { 
    return function (exception, cause) { 
     alert(exception.message); 
    } 
}); 

這並不做任何事情,它似乎並沒有覆蓋exceptionHandler的。

如果我嘗試:

var mod = angular.module('mApp', []); 

mod.factory('$exceptionHandler', function() { 
    return function(exception, cause) { 
    alert(exception); 
    }; 
}); 

它覆蓋整個應用程序。

如果我正在使用類似於默認角度應用程序的骨架,我該​​如何正確覆蓋exceptionHandler?

回答

2

如果沒有看到您的應用程序的其餘部分很難知道,但我猜angular.module('myApp').factory(...將工作。如果省略第二個參數(,[]),角度將檢索現有模塊以進行進一步配置。如果你保持它的角度將創建一個新的模塊。

+0

你是對的,去掉[]工作。但是$ exceptionHandler是一項服務嗎?在skel應用程序中,服務是這樣加載的:https://github.com/angular/angular-seed/blob/master/app/js/services.js – 2013-05-10 19:16:29

+0

是的,它是由角提供的服務:http:// docs.angularjs.org/api/ng.$exceptionHandler - 您使用此服務創建您自己的異常處理程序(您不創建新服務) – joakimbl 2013-05-10 19:32:20

0

嘗試這個例子

http://jsfiddle.net/STEVER/PYpdM/

var myApp = angular.module('myApp', ['ng']).provider({ 

    $exceptionHandler: function(){ 
     var handler = function(exception, cause) { 
      alert(exception); 
      //I need rootScope here 
     }; 

     this.$get = function() { 
      return handler; 
     }; 
    } 
}); 

myApp.controller('MyCtrl', function($scope, $exceptionHandler) { 
    console.log($exceptionHandler); 
    throw "Fatal error"; 
});