2017-02-24 73 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');