AngularJS에서 제공하는 $ log를 .config() 및 $ delegate를 통해 확장하려고하므로 $ log 및 $ broadcast에 대한 모든 호출을 catch 할 수 있습니다. 이 방법은 다른 컨트롤러가 $ 로그 메시지와 웹 사이트의 업데이트 독립적으로 다른 부분을 잡을 수 있습니다 : 나는 보았다
Error: [$injector:cdep] Circular dependency found: $log <- $exceptionHandler <- $rootScope
그러나
var app = angular.module('testApp', [])
.config(function($provide) {
$provide.decorator('$log', function($delegate, $rootScope, logX) {
return logX($delegate);
});
})
.factory('logX', function() {
return function($delegate, $rootScope) {
return {
log: function() {
console.log('[log] ' + arguments[0]);
$rootScope.$broadcast('XXXlogXXX', arguments[0]);
},
info: function() {
console.info('[info] ' + arguments[0]);
$rootScope.$broadcast('XXXinfoXXX', arguments[0]);
},
error: function() {
console.error('[error] ' + arguments[0]);
$rootScope.$broadcast('XXXerrorXXX', arguments[0]);
},
warn: function() {
console.warn('[warning] ' + arguments[0]);
$rootScope.$broadcast('XXXwarningXXX', arguments[0]);
},
}
};
})
.controller('naCtrl', ['$scope', '$log',
function($scope, $log) {
$scope.init = function() {
$log.info('INIT INVOKED!');
};
}
]);
을, 나는 다음과 같은 예외 (http://jsfiddle.net/rtubio/yu3882nv/2/)를 얻고 Stackoverflow에서 많은 예제 (예 : example-1 또는 example-2). $ rootScope가 팩토리 메소드 내에서 사용될 수 있다는 것은 명백합니다. 나는 그것이 .config 메소드에서 .factory 메소드를 호출했기 때문에 그것이 확실하다는 것을 확신하지만, 나는 여전히 의존성을 깨는 방법을 잘 모른다. 가능한가?
필자는이 솔루션을 Fiddle (http://jsfiddle.net/rtubio/rfuzg0up/)에서 구현했지만 작동하지 않지만 여전히 순환 종속성이 있다고 말합니다. 이 $ log 데코레이터의 종속성으로 $ rootScope를 포함하는 것과 관련된 것이 있습니까? – Ricardo