2014-05-20 8 views
5

Ho rilevato un'applicazione Angular da un altro sviluppatore.Come posso lasciare che Angular mostri un errore su un errore angolare?

Ora ho giocato con esso e ho apportato le mie prime modifiche.

La domanda è: quando eseguo il binding a elementi non esistenti (o commetto altri errori) non vedo alcun errore, che suona bene ma non lo è perché voglio essere avvisato quando faccio qualcosa di sbagliato.

Come posso fare errori di visualizzazione angolare?

risposta

6

Per iniziare, si consiglia di non utilizzare la versione ridotta di angolare, in quanto la versione non terminata consente di registrare più errori coerenti e chiari nella console.

Quindi, il modo migliore per gestire gli errori angolari è scrivere un wrapper personalizzato per gestirli meglio. Ecco un esempio di come potresti scrivere un wrapper.

Il primo passo sarebbe scrivere una funzione che gestirà l'errore nel modo desiderato. Questo è il modo in cui gestisco gli errori angolari. Nota: questo potrebbe essere modificato in molti modi diversi per rendere la gestione degli errori più personalizzata.

function HandleAngularError(Exception, AppName){ 
    try { 
     var AppName = (window.parent._.isEmpty(AppName) ? "Angular App Unspecified" : AppName) + " - "; 

     if (window.parent._.isUndefined(Exception)) { 
      console.log(strAppName + "error: exception undefined", "AngularJs"); 
     } else { 
      console.log(strAppName + "error: " + Exception.toString() + " " + JSON.stringify(Exception), "AngularJs"); 
     } 
    } catch (e) { 
     alert("Handle Angular Error: " + Exception.toString() + " " + JSON.stringify(Exception)); 
    } 
} 

Il passo successivo è quello di includere la funzione di gestione degli errori in uno qualsiasi dei moduli in voi progetto e fare affidamento sulla $ exceptionHandler per poi passare errori angolari nella vostra wrapper personalizzato in questo modo:

angular.module("someApp",[], function(){ 
//setup stuff here 

}).factory('$exceptionHandler', function() { 
    return function (exception) { 
     HandleAngularError(exception, "someApp"); 
    }; 
});  
4

Per impostazione predefinita, AngularJS è indulgente, vale a dire che preferisce non mostrare nulla piuttosto che generare un'eccezione se si associa un valore non definito.

Da doc angolare:

In JavaScript, cercando di valutare le indefiniti proprietà genera ReferenceError o TypeError. In Angular, la valutazione dell'espressione è indulgente a undefined e null.

Un modo di visualizzare un errore potrebbe essere quello di decorare la funzione $eval, che viene utilizzata per valutare le espressioni associate.

si potrebbe provare qualcosa di simile:

app.run(function($rootScope) { 
    var origRootScope = $rootScope, 
     origEval = origProvider.$eval; 

    //Override rootScope's $eval with our own 
    origProvider.$eval = function(expression, locals) { 

     // Test the expression value and add the behavior you like 
     if(typeof expression === 'undefined') { 
      // Log some kind of error 
      console.log('Some kind of error') 
     } 
     // Call the original $eval function 
     var returnValue = origEval.apply(this, arguments); 

     return returnValue; 
    } 
}); 

Non ho provato quel codice, ma si dovrebbe essere in grado di aggiungere personalizzato accedendo a $eval in questo modo.

Problemi correlati