Czy istnieje sposób na wprowadzenie AngulaJS $ log do każdej usługi i kontrolera? Po prostu wydaje się trochę zbędny, określając go dla każdego.
Odpowiedz
Wstrzyknięcie wydaje mi się niemożliwe bez zdefiniowania go w parametrach funkcji. Ale można udostępnić go:
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
Innym sposobem byłoby, aby ustawić go jako zmienną globalną (window.$log
), ale tego nie zrobił.
Innym sposobem, w jaki można to zrobić, jest dodanie metody do rootScope, a następnie dostęp do niej za pomocą $ scope. $ Root w kontrolerach, co pozwala uniknąć kolejnego zastrzyku. Nie wiem, czy jest tak źle, jak globale.
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>
Całkiem miło. Lubię pisać swoje kontrolery bez umieszczania wszystkiego w zasięgu używając składni "kontroler jako", więc okazuje się, że muszę wstrzyknąć $ scope do wszystkich z nich i po prostu łatwiej jest wprowadzić $ log. –
Prawie nie wydaje się uaktualnieniem - wolałbym wstawić '$ log' wszędzie, niż trzeba wpisać' $ scope. $ Root.log', a także wstrzykiwać '$ scope' w miejscach, w których wcześniej nie byłem (np .: izolować dyrektywy zasięgu) ... Przekażę –
Oto rozwiązanie dla tych, którzy uważają, że za pomocą $ rootscope wymaga zbyt dużo zamieszania: dodaj dziennik $ do kątowego obiektu.
angular.module('myModule')
.run(['$log', function($log) {
angular.log = $log;
}]);
Następnie podczas tworzenia kontrolerów nie jest wymagany dziennik $.
angular.module('myModule')
.controller('MyController', MyController);
MyController.$inject = []; // <-- see, no $log required!
function MyController() {
angular.log.info("Hello world");
}
Możesz nawet posunąć się o krok dalej i dodać angular.info = $ log.info, jeśli chcesz go nieco skrócić.
- 1. Jak wprowadzić proxy do usługi?
- 2. Symfony 3 - jak wprowadzić walidator do usługi?
- 3. Nie można wprowadzić dane rozwiązywaniu do mojego kontrolera
- 4. Błąd usługi przesyłania kontrolera $ podczas ładowania kontrolera
- 5. Jak wprowadzić wynik metody usługi jako argument dla innej usługi?
- 6. Funkcja kontrolera połączeń z usługi w angularjs
- 7. Uwierzytelnianie MVC5: atrybut autoryzacji dla każdego kontrolera lub kontrolera podstawowego
- 8. AngularJS: Wprowadzić kontroler wewnątrz innego kontrolera z tego samego modułu.
- 9. niezdefiniowane odniesienie do `log '
- 10. AngularJS - Wywołanie funkcji kontrolera z usługi
- 11. Zadzwoń do asp.net klasy członkowskiej z kontrolera lub warstwy usługi?
- 12. Grails 2.4.3 nie przeładowuje kontrolera lub usługi
- 13. AngularJS - wzorce dyrektywy/usługi CRUD/kontrolera
- 14. Git log: log przyszłych wersji
- 15. log nazwa zmiennej i wartość
- 16. Jak wprowadzić html do Flask?
- 17. Jak wprowadzić wartość do Monoid?
- 18. Procesy uruchomione przy użyciu systemd logują się do/var/log/syslog i /var/log/daemon.log
- 19. Jak wprowadzić uwierzytelnianie użytkownika do aplikacji mobilnej?
- 20. Angular 2: Wprowadzić zależność do @CanActivate?
- 21. Czy log (n!) = Θ (n · log (n))?
- 22. Jak wprowadzić hasło do polecenia git pull?
- 23. Jak wprowadzić HttpServletRequest do żądania Spring AOP (niestandardowy scenariusz)?
- 24. Jak mogę przenieść żądania HTTP z kontrolera AngularJS i do usługi?
- 25. Przekazywanie HttpPostedFileBase do metody kontrolera
- 26. dział log-log z seaborn jointgrid
- 27. Jak wprowadzić zmiany do silnych zmian do parametrów (małymi literami)
- 28. Czy można wprowadzić $ rootScope do kontrolera w celu użycia lub przesłonięcia modeli/metod zdefiniowanych w $ rootScope w AngularJS?
- 29. ASP.NET MVC i usługi sieciowe
- 30. Jak skonfigurować log pobudzający, do pisania z obracaniem i dołączaniem?
Kiedy definiujesz 'var $ log' w zasięgu globalnym, w zasadzie ustawiasz' window. $ Log' –