2015-05-31 16 views
15

Über bei angular-logger, wir versuchen, $log zu verbessern, aber wir möchten im Namen der Winkel Modul und Komponente ohne Änderungen arbeiten. Um dies zu tun, müssen wir die AngularJS bekommen Kontext zur Laufzeit, das heißt, die Modulnamen und Controller, Service oder Richtlinie Namen.Get Modul und Controller | Service | Direktive Namen zur Laufzeit

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

Standard $log Ausgang:

> I am ready! 
> I am ready! 

Wenn wir das Modul und Controller-Namen zur Laufzeit erhalten können, dann die erweiterte $log verwenden, können wir reiche Ausgabe:

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

Die beste Die Option besteht darin, es ohne Änderungen am Code des Controllers zu erhalten. Vielleicht gibt es eine Möglichkeit, einige Meta-Informationen über die Entitäten zu erhalten, die die $ log-Abhängigkeitsinjektion erhalten haben?

Irgendwelche Vorschläge?

+0

können Sie eine Richtlinie ng-Controller erstellen, die für jeden Controller ausführen würde und analysieren den Inhalt ng-Controller als String zur Verfügung gestellt und stellen Sie es auf eine Variable in der Partitur .. und dann diese Variable verwenden Controller drucken Name – harishr

+0

Winkel führt alle Anweisungen, wenn mehrere Direktiven mit demselben Namen gefunden – harishr

Antwort

6

Es gab eine similar question that I found auf SO, aber die Lösung funktioniert nur bei Verwendung von Controller als Syntax.

// 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, sah ich Ihre Bearbeitung. Warum denkst du "Die Angular Array Annotation ist für Bildungszwecke überflüssig". –

+2

Die Array-Annotation wird verwendet, um ein Problem zu umgehen, das nur bei der Minimierung auftritt. In diesem Fall hat es keinen Mehrwert und hilft nur relevante Informationen zu verschleiern. [su · per · fluous, adj .: _übersteigen, was ausreichend oder erforderlich ist] (http://www.thefreedictionary.com/superfluous) –

+0

Es ist eine Schande, dass nur für Controller funktioniert und log-erweiterten Funktionen für Dienste ausgelassen und Richtlinien. Ich denke daran, das Wrappen mit einer Kontextausführung zu lösen, vor einiger Zeit las ich von einem Framework, das dies für die Test- oder Thread-Ausführung macht, aber ich erinnere mich nicht an seinen Namen. – pdorgambide

Verwandte Themen