2015-05-31 5 views
15

Oltre a angular-logger, stiamo cercando di migliorare $log, ma vorremmo lavorare nel nome del modulo e del componente angolare senza modifiche. Per fare questo abbiamo bisogno di ottenere i AngularJS contesto in fase di esecuzione, vale a dire, il nome del modulo e regolatore, il servizio o direttiva nomi.Ottieni modulo e controller | service | nome direttiva in fase di esecuzione

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

predefinito $log uscita:

> I am ready! 
> I am ready! 

Se siamo in grado di ottenere il nome del modulo e di controllo in fase di esecuzione, quindi utilizzando il migliorato $log possiamo ottenere un output più ricchi:

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

La migliore l'opzione sarà quella di ottenerlo senza modifiche al codice del controller. Forse c'è modo di ottenere alcune meta informazioni sulle entità che hanno ricevuto l'iniezione della dipendenza $ log?

Qualche suggerimento?

+0

è possibile creare un ng-regolatore di direttiva, che avrebbe eseguito per ogni controller e analizzare il contenuto fornito da NG-controller come stringa e impostarlo su alcune variabili nel punteggio .. e quindi utilizzare tale variabile per la stampa del controller nome – harishr

+0

angolare esegue tutta la direttiva se trova più direttive con lo stesso nome – harishr

risposta

6

C'era un similar question that I found su SO, ma la soluzione funziona solo quando si utilizza il controller come sintassi.

// 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, ho visto la tua modifica. Perché pensi che "L'annotazione dell'array angolare è superflua per scopi educativi". –

+2

L'annotazione dell'array viene utilizzata per aggirare un problema che si verifica solo durante il minification. In questo caso non ha alcun valore aggiunto e aiuta solo a oscurare le informazioni pertinenti. [su · per · flu · ous, adj .: _aggiuntamento di ciò che è sufficiente o richiesto_] (http://www.thefreedictionary.com/superfluous) –

+0

È un peccato che funzioni solo per il controller e per le funzionalità di enhaced dei log abbandonate per i servizi e direttive. Mi viene in mente di risolvere il wrapping con un'esecuzione del contesto, tempo fa ho letto di un framework che rende questo per l'esecuzione di test o thread ma non ricordo il suo nome. – pdorgambide

Problemi correlati