C'è un modo per iniettare il log $ di AngularJS in ogni servizio e controller? Mi sembra un po 'ridondante specificarlo per tutti.
risposta
Iniettare mi sembra impossibile senza definirlo nei parametri di funzione. Ma si può rendere disponibile:
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
Un altro modo sarebbe quello di impostarlo come una variabile globale (window.$log
), ma io non lo farei.
Un altro modo per farlo è aggiungere un metodo a rootScope e quindi accedervi tramite $ scope. $ Root nei controller, evitando così un'altra iniezione. Non so se è così male come i globali.
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>
Abbastanza bello. Mi piace scrivere il mio controller senza mettere tutto sull'oscilloscopio usando la sintassi 'controller as' in modo che risultasse necessario iniettare $ scope in tutti loro ed è solo più semplice iniettare $ log. –
Sembra quasi un aggiornamento - preferirei iniettare '$ log' dappertutto che digitare' $ scope. $ Root.log' e anche iniettare '$ scope' in posti che non ero prima (es.) ... Io passo –
Ecco una soluzione per coloro che pensano che l'uso del $ rootscope richiede troppa confusione: aggiungere il registro $ all'oggetto angolare.
angular.module('myModule')
.run(['$log', function($log) {
angular.log = $log;
}]);
Quindi quando si creano i controller, non è richiesto $ log.
angular.module('myModule')
.controller('MyController', MyController);
MyController.$inject = []; // <-- see, no $log required!
function MyController() {
angular.log.info("Hello world");
}
Si potrebbe anche fare un ulteriore passo avanti e aggiungere angular.info = $ log.info se si desidera accorciare un po 'di più.
- 1. Il motivo decoratore e @Inject
- 2. AngularJS inject service mock in test di servizio
- 3. Inject bean in enum
- 4. Servizio Inject in ConstraintValidator [Bean Validator - JSR 303] Primavera
- 5. Grails Spock test Controller e il servizio
- 6. Inject AutoMapper
- 7. Xcode: Storyboard e conservazione dei dati in ogni controller
- 8. Inject dateFilter in a service in AngularJs
- 9. Equivalente per inject() in Python?
- 10. Symfony: Inject object (not service) al servizio di costruzione
- 11. Grails: Inject Service nell'oggetto Command
- 12. impostazione servizio al controller figlio
- 13. Inject dependencies in ES2015 module
- 14. sempre log e logrotate
- 15. @Inject Android e @InjectView annotazioni significato
- 16. Symfony2: Inject current user in Service
- 17. Esegui codice prima/dopo ogni azione del controller
- 18. Servizio angolare con classe ES6 e Babel
- 19. Qual è la differenza tra un controller e un servizio?
- 20. Inject spring dependency in abstract super class
- 21. Controller -> Servizio -> Repository: servizio map Entity to ViewModel?
- 22. WildFly Swarm Nullpointer @Inject bean
- 23. Come leggere le impostazioni web.config nel metodo del controller MVC e accedervi in vista angularjs, controller e servizio?
- 24. Gulp-Inject non funziona
- 25. Inject vs ManagedProperty
- 26. Inject CSS for chrome extension
- 27. Come eseguire un servizio ogni giorno a mezzogiorno e ad ogni avvio
- 28. laravel-5 modello separato per ogni tabella di log
- 29. controller <-> Servizio componente interazione
- 30. MVC - Comunicazione livello controller a servizio
Quando si definisce 'var $ log' in un ambito globale si sta fondamentalmente impostando' window. $ Log' –