2017-02-24 62 views
0

在Angularjs中存儲和訪問自定義消息的最佳方式是什麼? 例子:angularjs自定義消息和日誌記錄

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

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

而不是硬編碼的自定義消息,我想在一個文件中存儲所有類型的信息和訪問它的一個KEY value.Any建議?

另外我怎樣才能爲Angularjs設置一個記錄器,以便所有日誌都發生在同一個地方。 這就是我所做的。

代替$log.debug('Data saved!')

我建立了一個服務作爲logService用的方法,如下面

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); 
    } 
} 

我然後注入logService到控制器和日誌中的消息像下面

logService.logError(error.error_description);

我相信可以有更好的日誌記錄方式。任何幫助是極大的讚賞 ?。

回答

0

您可以使用工廠來集中警報。

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

你可以簡單地使用你的警報,如組件Alerts.success.delete

至於消息的記錄,您可以根據應用程序配置中的變量打開和關閉$log.debug

.config(function($logProvider){ 
    $logProvider.debugEnabled(false); 
}) 

您可以用日誌記錄級別添加一個全局變量,並基於該水平,如果你發送電子郵件或寫信到數據庫決定。我添加了一個JSFiddle,演示瞭如何實現記錄器。不要忘記打開控制檯查看結果。

我也會粘貼jsfiddle的內容。

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

看起來不錯。我需要做些什麼改變.factory('Alerts'....將數據作爲Alert.success.saved和Alert.error.saved? – bp581

+0

返回{ 「成功」:{ 「刪除」: 「刪除成功的」 }, 「錯誤」:{ 「刪除」: 「刪除不成功的」 }, 「成功」:{ 「保存」: 「消息保存成功」 }, 「錯誤」:{ 「已保存」:「保存數據時出錯」 } }; – bp581

+0

這是正確的方法嗎?抱歉,我是新來的angularjs – bp581

0

對於在一個地方處理消息,我使用ngLocalize。這裏是link的細節。

總之,

您創建一個/res/en-US/messages.lang.json文件在您的應用程序目錄(或使用任何你想要的其他本地化)。該文件應具有以下格式:

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

接下來,包括要使用它的模塊中ngLocalize。在這之後,你可以在HTML中使用它作爲:

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

或在你的控制器代碼:

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