Gibt es eine Möglichkeit, AngularJS $ Log in jedem Service und Controller zu injizieren? Es fühlt sich einfach ein wenig überflüssig an, es für jeden zu spezifizieren.
Antwort
Injizieren scheint mir unmöglich, ohne es in den Funktionsparametern zu definieren. Aber man kann es zur Verfügung stellen:
var $log;
app.run(['$log',function(logService) {
$log = logService;
}]);
app.controller('MainCtrl', function($scope, myService) {
$log.warn('Controlling');
});
app.service('myService', function() {
$log.warn('Ha!');
return {};
});
http://plnkr.co/edit/Zwnay7dcMairPGT0btmC?p=preview
Eine weitere Möglichkeit, es als eine globale Variable zu setzen wäre (window.$log
), aber ich würde das nicht tun.
Eine weitere Möglichkeit ist, eine Methode zum rootScope hinzuzufügen und dann über $ scope. $ Root auf Ihre Controller zuzugreifen und so eine weitere Injektion zu vermeiden. Ich weiß nicht, ob es so schlimm ist wie Globals.
testapp.js
(function(){
'use strict';
angular.module('app', [])
.run(function($rootScope, $log) {
$rootScope.log = function(msg){
$log.info(msg);
}
})
.controller('LogCtrl', ['$scope', function LogCtrl($scope) {
$scope.logThis = function(msg){
$scope.$root.log(msg);
};
}]);
})();
test.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.5/angular.min.js"></script>
<script src="testapp.js"></script>
</head>
<body ng-app="app">
<div ng-controller="LogCtrl">
<p>Enter text and press the log button.</p>
Message:
<input type="text" ng-model="message"/>
<button ng-click="logThis(message)">log</button>
</div>
</body>
</html>
Ganz nett. Ich mag es, meinen Controller zu schreiben, ohne alles auf den Bereich zu setzen, indem ich die "Controller als" -Syntax benutze, so dass ich $ scope in alle von ihnen injizieren muss und es einfach einfacher ist, $ log zu injizieren. –
Scheint kaum wie ein Upgrade - ich würde lieber '$ log' injizieren, als' $ scope. $ root.log' einzugeben und '$ scope' auch an anderen Stellen einzufügen (zB: isoliere Bereichsdirektiven)) ... Ich werde vorbeigehen –
Hier ist eine Lösung für diejenigen, die denken, dass die $ rootscope mit zu viel Aufwand erfordert: fügen Sie das Protokoll $ zu dem eckigen Objekt.
Wenn Sie Ihre Controller erstellen, ist kein $ log erforderlich.
angular.module('myModule')
.controller('MyController', MyController);
MyController.$inject = []; // <-- see, no $log required!
function MyController() {
angular.log.info("Hello world");
}
Sie könnten sogar einen Schritt weiter gehen und hinzufügen angular.info = $ log.info, wenn Sie es ein wenig mehr kürzen möchten.
- 1. dynamische Aktualisierung Dependency Injection-Service
- 2. Service und Controller in Angularjs
- 3. Dependency Injection und ModelStateWrapper
- 4. Web-Service und Log-Datei Frage
- 5. ZF2 Service Locator & Dependency Injection
- 6. Injection Mock Winkel Service-Abhängigkeiten
- 7. Schienen Service Objekte und Controller
- 8. Angular service in type script mit dependance injection und minification
- 9. Injection Facebook JS SDK in AngularJS Controller
- 10. Dependancy Injection in abstrakten Controller fehlgeschlagen
- 11. Angular injector error injection factory in controller
- 12. Wie Injection Service in Angular 1.5-Komponente (kein Typoskript)
- 13. Constructor Injection und wann man einen Service Locator verwendet
- 14. Dependency Injection und Scope?
- 15. Get Modul und Controller | Service | Direktive Namen zur Laufzeit
- 16. Service-Injektion in Controller AngularJS
- 17. Winkelseite mit Factory, Service und Controller
- 18. Wie Winkelkomponente, Service und Controller funktioniert
- 19. Grails Spock Test-Controller und Service
- 20. EmberJS Beratung über Controller, Service und Komponentenverwendung
- 21. Service-Injektion in Controller (Spring MVC)
- 22. Transaktional: Controller vs Service
- 23. Access Service innerhalb Controller
- 24. Spring Injection in JSP
- 25. Dependency Injection von IActorStateManager in Azure Service-Fabric Stateful Schauspieler
- 26. Injection Fehler in Winkel
- 27. Constructor Dependency Injection in einer ASP.NET MVC-Controller
- 28. Unterschied zwischen Service-Schicht und Controller in der Praxis
- 29. AngularJS Service-Update-Controller Variable
- 30. SQL Injection und Active
Wenn Sie 'var $ log' in einem globalen Bereich definieren, setzen Sie im Grunde' window. $ log' –