gpt4 book ai didi

javascript - 是否可以使用 $logProvider 登录模块的配置 block ?

转载 作者:数据小太阳 更新时间:2023-10-29 04:58:07 25 4
gpt4 key购买 nike

我想在调试时将日志消息输出到控制台。在 Controller 中工作正常,但无法在模块配置 block 中工作,例如

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

是否可以在模块的配置 block 中使用 logProvider?

最佳答案

$logProvider在配置阶段访问用于配置日志服务,或者您可以注入(inject) $provide 以使用 decorators 更改/利用日志服务的行为.日志服务本身尚未在您的模块 MyApp 中实例化。您可以改为从核心 ng 获取记录器实例并将其用于调试。

你可以这样做:-

 .config(function(){
var $log = angular.injector(['ng']).get('$log')
$log.debug('Config debug message');
});

$logProvider.$get 将为您提供日志服务的构造函数,您可以自己通过调用 $injector.instantiate($logProvider.$get) 创建它的实例> 但问题在于它依赖于尚未实例化的窗口服务,因此最终您的记录器实例化将失败。

另一种 hacky 方法是通过在配置 block 中添加一个装饰器来强制 angular 实例化记录器,您可以在需要任何配置日志记录之前将其设置为第一个配置 block ,之后您可以执行 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

关于javascript - 是否可以使用 $logProvider 登录模块的配置 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com