2017-02-24 3 views
0

Was ist der beste Weg zum Speichern und den Zugriff auf benutzerdefinierte Nachrichten in Angularjs? Beispiel:angularjs benutzerdefinierte Nachrichten und Protokollierung

$scope.alert.msg = "Delete successful !!"; 

$scope.alert.msg = "Error deleting record."; 

Statt schwer, die benutzerdefinierten Nachrichten Codierung, würde ich in einer einzigen Datei, die alle Arten von Nachrichten speichern möge und den Zugang durch eine Empfehlung KEY Wert erklären?

Auch wie kann ich einen Logger für Angularjs einrichten, so dass alle Protokolle an einem Ort passieren. Das habe ich gemacht.

Statt $log.debug('Data saved!')

habe ich einen Dienst als LOGSERVICE mit Methoden wie unter

logData.logInfo = function(logMessage) { 
    // information log me 
    if (config.logLevel == 10) { 
     $log.debug(logMessage); 
     //TODO save logMessage to database 
    } 
} 
logData.logError = function(logMessage) { 
    if (config.emailError) { 
     // log and email the error 
     $log.debug(logMessage); 
     //TODO Email 
     //TODO save logMessage to database 
    } else { 
     // log only 
     //TODO save logMessage to database 
     $log.debug(logMessage); 
    } 
} 

I dann die LOGSERVICE an Steuerungen injizieren und protokollieren die Nachrichten wie unten

logService.logError(error.error_description);

Ich bin mir sicher, dass es bessere Wege geben kann, zu loggen. Jede Hilfe wird sehr geschätzt?

Antwort

0

Sie könnten eine Fabrik verwenden, um Ihre Warnungen zu zentralisieren.

.factory('Alerts', function() { 
    return { 
     "success": { 
      "delete": "Delete succesful" 
     }, 
     "error": { 
      "delete": "Delete unsuccesful" 
     } 
    }; 
}) 

Sie können einfach Sie sind Benachrichtigungen, wie in einer Komponente Alerts.success.delete verwenden.

Wie für die Protokollierung der Nachrichten können Sie die $log.debug basierend auf einer Variablen in der Konfiguration der Anwendung ein- und ausschalten.

Sie können eine globale Variable mit einer Protokollierungsstufe hinzufügen und basierend auf dieser Ebene entscheiden, ob Sie eine E-Mail senden oder in eine Datenbank schreiben. Ich habe eine JSFiddle hinzugefügt, wo ich demonstriere, wie ich einen Logger implementieren würde. Vergiss nicht, deine Konsole zu öffnen, um die Ergebnisse zu sehen.

Ich werde auch den Inhalt der Jsfiddle gerade einfügen.

angular.module('myApp', []) 
    .constant('LOG_LEVEL', 1) 
    .config(function($logProvider){ 
     $logProvider.debugEnabled(true); 
    }) 
    .factory('Alerts', function() { 
     return { 
      "success": { 
       "delete": "Delete succesful" 
      }, 
      "error": { 
       "delete": "Delete unsuccesful" 
      } 
     }; 
    }) 
    .factory('LogService', function($log, LOG_LEVEL) { 
      function writeToDB() { 
      //Write to db 
     }; 
     function email() { 
      //Email someone 
     } 
     return { 
      error: function(msg) { 
       $log.error(msg); 
       if (LOG_LEVEL > 0) writeToDB(msg); 
       if (LOG_LEVEL > 1) email(msg); 
      }, 
      success: function(msg) { 
       $log.log(msg); 
      }, 
      debug: function (msg) { 
        $log.debug(msg); 
      } 
     } 
    }) 
    .run(function(LogService, Alerts) { 
     LogService.error(Alerts.error.delete); 
     LogService.success(Alerts.success.delete); 
     LogService.debug("Turn me on and off in the config!") 
    }) 
+0

sieht gut aus. Welche Änderungen muss ich an .factory ('Alerts' ... vornehmen, um Daten als Alert.success.saved und Alert.error.saved zu erhalten? – bp581

+0

Rückkehr { "Erfolg": { "löschen": "Löschen erfolgreich" }, "Fehler": { "löschen": "Löschen unsuccesful" }, "Erfolg": { "gerettet": "Nachricht erfolgreich gespeichert" }, "Fehler": { "gespeichert": "Fehler beim Speichern der Daten" } }; – bp581

+0

ist das der richtige Weg? Entschuldigung, ich bin neu bei angularjs – bp581

0

Für Nachrichten an einem Ort der Handhabung, verwende ich ngLocalize. Hier ist die link mit den Details.

Kurz gesagt,

Sie erstellen eine /res/en-US/messages.lang.json Datei in Ihrem App-Verzeichnis (oder jede andere Lokalisierung verwenden Sie möchten). Die Datei sollte folgendes Format haben:

{ 
    "msgError":"Error occurred", 
    "msgUserLoggedIn":"Successfully logged in" 
} 

Als nächstes sind ngLocalize in dem Modul, wo Sie wollen, es zu benutzen. Danach können Sie es in HTML verwenden wie:

<div> 
    {{ 'messages.msgUserLoggedIn' | i18n }} 
</div> 

oder in Ihrem Controller-Code wie:

var errorMessage = $filter('i18n')('messages.msgError');

Verwandte Themen