Angularjs를 사용하여 프로바이더에 의존관계를 주입하려면 어떻게 해야 합니까?
프로바이더 방식으로 DI가 가능한가요?
이 예에서는
angular.module('greet',[])
.provider('greeter',function() {
this.$get=function() {
};
})
.service('greeterService',function($http){
console.log($http);
})
;
주입$http
into service는 올바른 구현으로 보이지만 공급자 방식으로는 작동하지 않고 다음과 같은 오류가 발생합니다.
알 수 없는 공급자: $http
프로바이더 메서드는 DI와 연동하여 서비스를 주입합니까?
확실히 주사할 수 있어요.$http
프로바이더에 접속합니다.에 표시되는 것을 확인해 주세요.$get
함수 생성자가 아닙니다.다음과 같습니다.
angular.module('greet',[]).provider('greeter',function() {
this.$get = function($http) {
};
});
공급자에 상수 및 기타 공급자를 주입할 수 있습니다.서비스도 공장도 아닙니다.한 가지 예외가 있습니다.주사할 수 있을 것 같아요$injector
적어도 AngularJS 1.3.16에서는 가능합니다.
.provider('foo', ['$injector', function ($injector) {
var messagePrefix = $injector.get('msgPrefix');
this.message = '';
this.$get = function() {
var that = this;
return function() {
return messagePrefix + that.message;
}
};
}])
주입기를 외부로 사용할 수 있습니다.$get
메서드는 설정 시 서비스를 받을 수 없습니다.
IgrCnd의 답변에 따라 잠재적인 악질성을 회피할 수 있는 패턴을 다음에 제시하겠습니다.
angular.module('greet',[]).provider('greeter', function() {
var $http;
function logIt() {
console.log($http);
}
this.$get = ['$http', function(_$http_) {
$http = _$http_;
return {
logIt: logIt
};
}];
});
이는 동등한 서비스와 얼마나 유사한지 주의하여 두 서비스 간의 변환이 덜 번거롭습니다.
angular.module('greet',[]).factory('greeter', ['$http', function($http) {
function logIt() {
console.log($http);
}
return {
logIt: logIt
};
});
실제로 $get에 대한 의존관계를 주입하고 $get에서 취득한 항목에 사용하기 위해 저장해야 합니다.전혀 아름답지 않아...
아니요, 공급자 자체에 서비스를 삽입할 수 없습니다.공급자의 $get 메서드에 서비스를 주입하는 것은 공장에 서비스를 주입하는 것과 동일하지만 공급자의 기능에 직접 주입할 수는 없습니다.
$get과 공급자 자체의 차이점은 공급자가 모듈 로드 단계에서 실행되는 반면 $get은 제공하는 서비스를 인스턴스화할 때 실행됩니다.
이는 모듈의 로드/설정 단계에서는 서비스를 전혀 사용할 수 없음을 의미합니다.앱 루트나 상태를 정의할 때 등 구성 블록 내에서 실행하는 모든 작업은 서비스를 사용할 수 없습니다.
프로바이더 이외에 설정 블록에 주입할 수 있는 것은 상수뿐입니다.
IgrCndd가 제안한 대로 할 수 있어단, 프로바이더의 목적인 설정 블록에서 프로바이더를 소비할 필요가 있는 경우에는 그 후가 될 때까지 값이 주입되지 않습니다.그러니 약속을 이용해서 좀 지저분한 해킹을 하지 않는 한 효과가 없을 겁니다.
언급URL : https://stackoverflow.com/questions/19171207/how-to-inject-dependencies-into-a-provider-using-angularjs
'programing' 카테고리의 다른 글
각도에서의 $location.path(경로)와 $location.url(url)의 비교JS (0) | 2023.03.28 |
---|---|
Backup MySQL Database to Dropbox (0) | 2023.03.28 |
Angular를 사용하여 새 창에서 링크 열기JS (0) | 2023.03.28 |
지시문 삽입(프로그래밍 각도)JS (0) | 2023.03.28 |
src 변수를 사용한ng-module (0) | 2023.03.28 |