我想在调试时将日志消息输出到控制台。在控制器中工作正常,但无法在模块配置块中工作,例如
angular.module('MyApp', [])
.run(function($state){
// run stuff here
});
.config(function($logProvider){
$log.debug('Config debug message');
});
我收到错误:
error TypeError: Cannot read property 'debug' of undefined
是否可以在模块的配置块中使用logProvider?
答案 0 :(得分:17)
$logProvider
用于配置日志服务,或者您可以使用decorators注入$provide
来更改/利用logservice的行为。日志服务本身尚未在模块MyApp
中实例化。您可以从核心ng
获取记录器实例,并将其用于调试。
你可以这样做: -
.config(function(){
var $log = angular.injector(['ng']).get('$log')
$log.debug('Config debug message');
});
$logProvider.$get
将为您提供logservice的构造函数,您可以通过调用$injector.instantiate($logProvider.$get)
来创建它的实例,但问题是它依赖于尚未实例化的窗口服务,所以最终你的记录器实例化将会失败。
另一个hacky方法是强制角度来通过在配置块中添加一个装饰器来立即执行记录器,您可以在需要任何配置记录之前将其设置为第一个配置块,之后您可以执行ctor
$logProvider
getter
并获取记录器的实例。
.config(function($provide){
//Just a dummy decorator
$provide.decorator('$log', function($delegate){
return $delegate;
});
}).config(function($logProvider){
//get logger instance
var log = $logProvider.$get();
log.debug("Got it");
});
<强> Plnkr 强>