Javascript 是否可以使用$logProvider登录模块的配置块?
我想在调试时将日志消息输出到控制台。在控制器中工作正常,但无法在模块配置块中工作,例如Javascript 是否可以使用$logProvider登录模块的配置块?,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,我想在调试时将日志消息输出到控制台。在控制器中工作正常,但无法在模块配置块中工作,例如 angular.module('MyApp', []) .run(function($state){ // run stuff here }); .config(function($logProvider){ $log.debug('Config debug message'); }); 我得到一个错误: error TypeError: Cannot read proper
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?在配置阶段访问的日志用于配置日志服务,或者您可以使用注入$provide
来更改/利用logservice的行为。日志服务本身尚未在您的模块MyApp
中实例化。您可以从coreng
获取一个记录器实例,并将其用于调试
你可以做:-
.config(function(){
var $log = angular.injector(['ng']).get('$log')
$log.debug('Config debug message');
});
$logProvider.$get
将为您提供logservice的构造函数,您可以通过调用$injector.instantiate($logProvider.$get)
自己创建它的实例,但问题是它依赖于尚未实例化的窗口服务,因此最终记录器实例化将失败
另一种方法是强制angular实例化logger,方法是在config块中添加一个decorator,您可以在需要任何配置日志记录之前将其设置为第一个配置块,然后您可以从$logProvider
执行ctor
,并获取logger的实例
.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");
});
$logProvider
不是$log
服务。您希望如何使用日志提供程序?提供程序用于在配置阶段进行配置,它适合我的需要。只需要能够为我的配置块设置一些调试消息。@onblur不客气。我又增加了一种方法。我不确定是否有其他更好的方法来做到这一点(在第一个代码段中,为什么在.get(“$log”)之后省略了分号?)?