의존성 주입 (DI)의 이점은 더 이상 논의되지 않을 것이며, 스프링 프레임 워크를 사용한 사람들은 그것을 알고 있습니다. 전경 JS 프레임 워크로서 AngularJS는 또한 JavaScript/jQuery가 가지고 있지 않은 기능인 DI를 지원합니다. Angularjs와 관련된 DI에는 Angular.Module (), Angular.injector (), $ Injector 및 $ provere가 포함됩니다. DI 컨테이너의 경우 서비스 등록, 종속성 선언 및 객체 획득의 세 가지 요소가 있어야합니다. 예를 들어, 스프링에서 서비스 등록은 XML 구성 파일의 <ean> 태그 또는 @Repository, @Service, @Controller 및 @Component를 통해 구현됩니다. 객체의 획득은 ApplicationContext.getBean ()에 의해 구현 될 수 있습니다. 종속성 선언은 XML 파일로 구성 될 수 있거나 @Resource 및 기타 주석을 사용하여 Java 코드로 선언 할 수 있습니다. 각도에서 모듈 및 $ 제공은 서비스 등록과 동일합니다. 인젝터는 물체를 얻는 데 사용됩니다 (Angular는 종속성 주입을 자동으로 완료합니다). Angular의 종속성을 선언하는 3 가지 방법이 있습니다. 다음은이 세 가지 측면에서 Angular DI에 대한 소개입니다.
1. Angular.module ()은 모듈을 생성, 획득 및 등록하여 Angular로 모듈을 등록합니다
Angular.Module ()은 각도 모듈을 작성, 등록 및 검색하기위한 전 세계 장소입니다. 둘 이상의 인수를 통과하면 새로운 모듈이 생성됩니다. 하나의 인수 만 통과하면 기존 모듈 (모듈에 첫 번째 인수로 전달 된 이름)이 검색됩니다.
// 둘 이상의 매개 변수를 전달한다는 것은 새 모듈을 의미합니다. 빈 배열은 모듈이 다른 모듈에 의존하지 않음을 의미합니다. var createmodule = angular.module ( "myModule", []); // 모듈을 얻는 것이 하나만 있습니다. // 모듈이 존재하지 않으면 var getmodule = angular.module ( "mymod"; ALERT (createModule == getModule);
이 기능은 새 모듈을 생성하거나 기존 모듈을 얻을 수 있습니다. 생성 여부에 관계없이 매개 변수 수로 구별됩니다.
Angular.Module (이름, [요구], [configfn]);
이름 : 모듈의 이름을 나타내는 문자열 유형;
요구 사항 : 모듈이 의존하는 다른 모듈 목록을 나타내는 문자열 배열. 다른 모듈에 의존하지 않으면 빈 배열을 사용하십시오.
configfn :이 모듈에 대한 구성을 만드는 데 사용됩니다.
이제 우리는 모듈을 만들고 얻는 방법을 알고 있으므로 모듈은 무엇입니까? 공식 개발자 안내서에는 하나의 문장이 있습니다. 모듈을 앱 컨트롤러, 서비스, 필터, 지침 등의 다른 부분에 대한 컨테이너로 생각할 수 있습니다. 지금은 이해하지 못합니다. 이는 모듈이 컨트롤러, 서비스, 필터, 지침 등과 같은 하위 요소로 구성된 전체와 같은 일부 기능 모음이라는 것을 의미합니다. 지금 설명 할 수 없으므로 먼저 남겨 두겠습니다.
2. $ 제공과 모듈의 관계
$ 제공 서비스에는 $ 인젝터가있는 구성 요소를 등록하는 여러 가지 방법이 있습니다. 이러한 기능 중 다수는 또한 Angular.Module에 노출됩니다.
앞에서 언급했듯이 : 모듈 및 제공은 서비스를 인젝터에 등록하는 데 사용됩니다. 공식 API를 확인하면 $ prover가 제공 (), constant (), value (), factory () 및 service ()를 제공하여 다양한 본성의 서비스를 생성하는 것을 볼 수 있습니다. Angular.Module은 또한이 5 가지 서비스 등록 방법을 제공합니다. 실제로,이 둘의 기능은 정확히 동일하며, 이는 DI 컨테이너와 함께 서비스를 인젝터에 등록하는 데 사용됩니다.
공식 API에 따른 자동에는 $ prover 및 $ 인젝터가 포함되어 있으며 각 $ 인젝터에 자동으로 추가됩니다. 말 그대로, 각 인젝터에는이 2 가지 암시 적 서비스가 있습니다. 그러나 버전 1.2.25에서는 인젝터에 $를 제공 할 방법이 없다고 생각합니다. 이것이 왜 그런지 모르겠어요? 일반적 으로이 서비스를 표시 할 필요가 없으며 모듈에 제공된 API 만 사용하십시오.
var injector = angular.injector (); alert (injector.has ( "$ pross")); // falsealert (injector.has ( "$ injector")); // true
3. Angular.injector ()
Angular.injector ()를 사용하여 인젝터를 얻을 수도 있습니다. 그러나 모듈에 묶여 있지 않습니다. 이 접근법은 의미가 없으며 빈 DI 컨테이너를 만드는 것과 동일하며 서비스가 없습니다. 다른 사람들이 어떻게 사용할 수 있습니까? 올바른 방법은 인젝터를 만들 때로드 해야하는 모듈을 지정하는 것입니다.
// myModule 모듈을 만들고 서비스 var var var myModule = angular.Module ( 'myModule', []); myModule.Service ( 'myService', function () {this.my = 0;}); // 서비스를 생성하고 서비스 var hetmodule = angular.module ( 'Hermodule', []); hermodule.service ( 'herservice', function () {this.her = 1;}); // 서비스 var injector = angular.injector ([ "myModule", "hermodule"]); Alert (injector.get ( "myService").여러 모듈이로드되면 반환 된 인젝터를 통해 여러 모듈의 서비스를 얻을 수 있습니다. 이 예에서는 MyMoudle 만로드되면 획득 된 인젝터는 Hermoudle의 서비스에 액세스 할 수 없습니다. 여기에 주목하는 것이 특히 중요합니다. Angular.injector ()는 여러 번 호출 할 수 있으며 매번 새로 생성 된 인젝터 객체를 반환 할 때마다.
var injector1 = angular.injector ([ "myModule", "hermodule"]); var injector2 = Angular.injector ([ "myModule", "herModule"]); Alert (injector1 == injector2); // false
4. 각도의 종속성을 선언하는 세 가지 방법
Angular는 의존성을 얻는 세 가지 방법, 즉 추론, 주석 및 인라인 방법을 제공합니다.
// myModule 모듈을 만들고 서비스 var var var myModule = angular.Module ( 'myModule', []); myModule.Service ( 'myService', function () {this.my = 0;}); // injectorvar injector = angular.injector ([ "myModule"); // the the first the first inferenceInjector.invoke (function (myservice) {alert (myservice.my);}); // 두 번째 주석 - 기능 명령 (servicea) {alert (servicea.my);}; explicit. $ inject = [ 'myService']; injector.invoke (explicit); 함수 (servicea) {alert (servicea.my);}]);그중에서도 주석 및 인라인 메소드에는 기능 매개 변수 이름이 필요하지 않습니다. 추론 방법은 매개 변수 이름과 서비스 이름이 일관성이 있어야합니다. JS 코드가 압축 또는 난독 화 된 경우 기능에 문제가 있으며이 방법은 권장되지 않습니다.
위는 AngularJS 의존성에 의해 주입 된 정보의 편집입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 웹 사이트를 지원 해주셔서 감사합니다!