onb*_*lur 6 javascript angularjs angularjs-service
我想在调试时将日志消息输出到控制台.在控制器中工作正常,但不能让它在模块配置块中工作,例如
angular.module('MyApp', [])
.run(function($state){
// run stuff here
});
.config(function($logProvider){
$log.debug('Config debug message');
});
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
error TypeError: Cannot read property 'debug' of undefined
Run Code Online (Sandbox Code Playgroud)
是否可以在模块的配置块中使用logProvider?
PSL*_*PSL 17
$logProvider在配置阶段访问用于配置日志服务,或者您可以注入$provide以使用装饰器更改/利用logservice的行为.日志服务本身尚未在您的模块中实例化MyApp.您可以从核心获取记录器实例ng并将其用于调试.
你可以这样做: -
.config(function(){
var $log = angular.injector(['ng']).get('$log')
$log.debug('Config debug message');
});
Run Code Online (Sandbox Code Playgroud)
$logProvider.$get将为您提供logservice的构造函数,您可以自己通过调用创建它的实例,$injector.instantiate($logProvider.$get)但问题是它依赖于尚未实例化的窗口服务,因此最终您的logger实例化将失败.
另一个hacky方法是强制角度来通过在配置块中添加一个装饰器来强制记录器,您可以在需要任何配置记录之前将其设置为第一个配置块,之后您可以执行ctorfrom $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");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |