2015-05-31 71 views
15

angular-logger上,我們正在嘗試增強$log,但我們希望在不更改的情況下使用角度模塊和組件的名稱。要做到這一點,我們需要得到AngularJS 在運行時上下文,也就是說,模塊名稱控制器,服務指令名。在運行時獲取模塊和控制器|服務|指令名稱

app.module("SampleModule"). 
    controller("ControllerOne", function ($log) { 
     $log.debug("I am ready!") 
    }). 
    controller("ControllerTwo", function ($log) { 
     $log.debug("I am ready!") 
    }); 

默認$log輸出:

> I am ready! 
> I am ready! 

如果我們能夠獲得在運行時模塊和控制器的名稱,然後使用增強$log我們可以得到更豐富的輸出:

> SampleModule.ControllerOne: I am ready! 
> SampleModule.ControllerTwo: I am ready! 

最好選項可以在不更改控制器代碼的情況下得到它。也許有辦法獲得有關接收$ log依賴注入的實體的元信息嗎?

有什麼建議嗎?

+0

您可以創建一個指令NG-控制器,它會執行每一個控制器和分析提供給NG-控制器作爲字符串,並將其設置在比分一些變量..然後使用該變量來打印控制器的內容名稱 – harishr

+0

角度確實執行所有指令,如果發現多個指令同名 – harishr

回答

6

SO上有一個similar question that I found,但該解決方案僅在使用控制器作爲語法時才起作用。

// a simple route with controller as syntax 
$routeProvider.when(
    '/myRoute', 
    { 
     templateUrl: '/myRoute', 
     controller: 'ControllerOne as vm' 
    } 
); 

// controller 
app.controller("ControllerOne", ['$log', function ControllerOne($log) { 
    var vm = this; 
    $log.log(vm.constructor.name); 
}]); 
+0

@Plantface,我看到了你的編輯。你爲什麼認爲「角度數組註釋在教育目的上是多餘的」。 –

+2

數組註釋用於解決僅在縮小期間發生的問題。在這種情況下,它沒有附加價值,只會幫助掩蓋相關信息。 [su·per·flu·ous,adj:_exceeding什麼是足夠的或required_](http://www.thefreedictionary.com/superfluous) –

+0

這是一個恥辱,只適用於控制器和省略日誌enhaced功能的服務和指令。我想到了用上下文執行來解決包裝問題,前一段時間我讀到了一個用於測試或線程執行的框架,但我不記得它的名字。 – pdorgambide