programing

angular에서 인젝터를 검색할 수 없습니다.

oldcodes 2023. 4. 4. 22:14
반응형

angular에서 인젝터를 검색할 수 없습니다.

이 앱에는 두 가지 모듈이 있습니다.

angular.module('components', []).directive('foo', function () { return {};});
angular.module('gaad', ['components']);

이 모듈에는 여기에 포함되지 않은 많은 지침이 있습니다.어플리케이션은 정상적으로 동작.그러나 모듈의 인젝터를 가져오려고 할 때gaad:

var injector = angular.injector(['gaad', 'components']); //called after 'gaad' module initialization

에러가 발생합니다.

Uncaught Error: Unknown provider: $compileProvider from components 

지금 앱이 너무 커서 어디서 버그를 찾아야 할지 모르겠어요.제 질문은 다음과 같습니다.제 문제의 원인은 무엇일까요?

편집: 문제를 재현할 수 있었습니다.http://jsfiddle.net/selbh/ehmnt/11/

질문에 답변하기 전에 각 응용 프로그램마다 하나의 인젝터 인스턴스만 존재하며 모듈마다 존재하지는 않는다는 점에 유의해야 합니다.따라서 모듈별로 인젝터를 검색할 수 없습니다.물론 최상위 모듈을 사용하면 애플리케이션 전체를 나타냅니다.이런 의미에서 애플리케이션과 최상위 모듈은 동등해 보입니다.미묘한 차이로 보일 수 있지만, 이 질문에 완전하고 적절하게 답하기 위해서는 이해하는 것이 중요합니다.

다음으로, 내가 이해할 수 있는 바로는, 당신은 그 정보를 되찾고 싶어 한다.$injector새로운 인스턴스를 생성하지 않습니다.중요한 건...angular.injector새로운 것을 만듭니다.$injector인수로 지정된 모듈(앱)의 인스턴스.여기서 주 AngularJS 모듈(ng)을 명시적으로 지정해야 합니다.이 코드 예에서는 다음과 같습니다.

var injector = angular.injector(['gaad', 'components']);

'가드' 및 '구성 요소' 모듈에 정의된 구성 요소에서 새 인젝터를 생성하려고 했습니다.$compileProvider는 커스텀 모듈에 정의되어 있지 않습니다.모듈을 목록에 추가하면 새 인젝터를 생성하여 문제를 "해결"할 수 있습니다. 이는 아마도 발생하지 않을 것입니다.

실행 중인 응용 프로그램에 관련되어 있는 인젝터 인스턴스를 실제로 가져오려면 다음 두 가지 방법을 사용합니다.

  • Angular 내에서JS JavaScript의 가장 간단한 솔루션은 주입하는 것입니다.$injector인스턴스: http://docs.angularjs.org/api/angular.injector
  • Angular 외부에서JS월드 - 콜angular.element([DOM element]).injector()여기서 [DOM 요소]는 돔 요소입니다.여기서 [DOM 엘리먼트]는ng-app정의되어 있습니다(또는 이 요소의 임의의 자 요소).자세한 내용은 이쪽:http://docs.angularjs.org/api/angular.element

주사기 검색의 두 가지 방법을 보여주는 jsFiddle은 다음과 같습니다.http://jsfiddle.net/xaQzb/

please, 음, 음, 음, 음, 음, 음, 다, 다, 다, please, please, please, please, please, please$injector유닛 테스트 이외에는 그다지 일반적인 시나리오가 아닙니다.Angular를 검색하는 데 유용할 수 있습니다.Angular 외부에서 JS 서비스JS월드자세한 내용은 이쪽: 레거시 코드에서 Angular JS를 호출합니다.

주입기에도 ng를 포함해야 할 것 같습니다.

var injector = angular.injector(['ng', 'b', 'a']);

시작점: 각도분사기

ng 모듈을 명시적으로 추가해야 합니다.

앵귤러@코멘트를하려면 @pkozlowski.opensource가 ""라는 하십시오.$injector후 사용 속성에 할 때('이러한 경우'를 할 수 .「 」 「 」 ( 「 」 )console.log( 그 재산은 () () 됩니다.undefined.

이 문제는 로깅 기능의 실행에0 타임아웃을 설정하는 것만으로 해결할 수 있습니다(즉, 밀리초 단위의 명시적인 지연은 불필요합니다).이 있을 때, 되고 Angular의 부트스트래핑이 종료되었을 때 합니다.$injectordom dom dom dom DOM 수수수수수수수수수수수수수수수수수수 。

Angular의 ( 더 나은)를 포함하는 것입니다.$injector-실행 블록의 코드에 액세스 합니다(관련 API도 참조).$injector그러면 일반 서비스로서 초기화 기능에 쉽게 삽입할 수 있습니다.모든 부트스트래핑이 종료되면 실행 블록이 큐잉되어 비동기적으로 실행되기 때문에 이 방법은 작동합니다.

아래에는 각 솔루션마다 하나씩 두 개의 핀들이 있습니다.

0 타임아웃 jsFiddle

실행 블록 jsFiddle

편집

또, 통상은, 명시적으로 로딩할 필요는 없습니다.ng□□□□□□□□□□□□□□□□□.ngAngular 코드의 수동 부트스트랩을 수행하지 않는 한 모델은 이미 자동으로 로드됩니다. 중 모듈을 .

언급URL : https://stackoverflow.com/questions/13400687/cant-retrieve-the-injector-from-angular

반응형