2014-09-22 94 views
5

我想在調試時將日誌消息輸出到控制檯。在控制器中正常工作,但無法使其在模塊配置塊中工作,例如,

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

'$ logProvider'不是'$ log'服務。你想用log provider做什麼?提供者用於在配置階段進行配置 – PSL 2014-09-22 23:27:28

回答

15

$logProvider在配置階段期間訪問用於配置日誌服務,或者您可以注入$provide以使用decorators更改/利用logservice的行爲。日誌服務本身尚未在您的模塊MyApp中實例化。您可以改爲從核心ng獲取記錄器實例並將其用於調試。

你可以這樣做: -

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

$logProvider.$get會給你logservice構造函數,你可以自己創建它的實例,通過調用$injector.instantiate($logProvider.$get)但問題是,它在具有窗口服務的依賴沒有蜜蜂實例化,所以最終你的記錄器實例化將失敗。

另一個哈克的方式將被強制的角通過將在配置塊,其可以設置爲任何配置日誌記錄之前的第一配置塊一個裝飾需要instantate記錄器,在這之後可以執行ctor$logProvidergetter和獲取記錄器的實例。

.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

+0

感謝@PSL - 這對我所需要的很有效。只需要能夠爲我的配置塊設置一些調試消息。 – onblur 2014-09-22 23:55:09

+0

@onblur不客氣。我又增加了一個方法。 ( – PSL 2014-09-23 00:18:48

+0

)在第一個代碼片段中,爲什麼在.get('$ log')之後遺漏了分號? – crowne 2015-09-03 22:15:50