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의 부트스트래핑이 종료되었을 때 합니다.$injector
dom dom dom dom DOM 수수수수수수수수수수수수수수수수수수 。
Angular의 ( 더 나은)를 포함하는 것입니다.$injector
-실행 블록의 코드에 액세스 합니다(관련 API도 참조).그$injector
그러면 일반 서비스로서 초기화 기능에 쉽게 삽입할 수 있습니다.모든 부트스트래핑이 종료되면 실행 블록이 큐잉되어 비동기적으로 실행되기 때문에 이 방법은 작동합니다.
아래에는 각 솔루션마다 하나씩 두 개의 핀들이 있습니다.
편집
또, 통상은, 명시적으로 로딩할 필요는 없습니다.ng
□□□□□□□□□□□□□□□□□.ng
Angular 코드의 수동 부트스트랩을 수행하지 않는 한 모델은 이미 자동으로 로드됩니다. 중 모듈을 .
언급URL : https://stackoverflow.com/questions/13400687/cant-retrieve-the-injector-from-angular
'programing' 카테고리의 다른 글
현재 카테고리를 가져오는 방법 (0) | 2023.04.04 |
---|---|
수집되지 않은 참조 오류 반응: 프로세스가 정의되지 않았습니다. (0) | 2023.04.04 |
객체 배열에서 리액트 컴포넌트 렌더링 (0) | 2023.04.04 |
Angularjs 코드/네임 규칙이 존재합니까? (0) | 2023.04.04 |
Google Chrome 브라우저에 메모리 제한이 있나요? (0) | 2023.04.04 |