2014-10-29 2 views
3

모듈로드 각도가 다소 혼란 스럽습니다. 예를 들어 다음과 같은 코드를 가지고 :의존성이없는 모듈이 다른 모듈에 액세스하는 방법

var app = angular.module("app", [ "app.widgets", "app.core"]); 


    var core = angular.module("app.core", []); 
    core.factory("foo", function(){ 
     return { 
     ping: function(){ 
     return "pong"; 
     } 
     } 
    }); 

    var widgets = angular.module("app.widgets", []); 
    widgets.controller("WidgetController", function($scope, foo){ 
     $scope.items = [1,2,3,foo.ping()]; 
    }); 

<body ng-app="app"> 
    <ul ng-controller="WidgetController"> 
    <li ng-repeat="item in items"> 
     {{item}} 
    </li> 
    </ul> 
</body> 

내 "app.widgets"모듈이 종속성으로 선언되지 않은 경우에도 "app.core"모듈에 액세스 할 수있는 방법에 대한 혼란 스러워요.

"app.widgets"및 "app.core"둘 다 세 번째 모듈에서 선언 되었기 때문에 종속성을 선택하는 것처럼 보입니다. 매우 편리합니다. 그러나 그것은 나에게 매우 직관적 인 것처럼 보이지 않습니다.

그래서 내 질문에 "두 모듈은 서로에 대해 '3 가지 모듈에서 선언 된 경우'알고있을 것"이라고 생각합니다. " 문서화 된 행동입니까?

+0

여기에 html이 있습니다 –

+0

그냥 html @ Naeem-Shaikh를 추가했습니다 –

+0

[의존성] (https://docs.angularjs.org/guide/module#dependencies) 섹션을 읽어야합니다. –

답변

2

는 나는 이렇게되면 생각 :

1) "응용 프로그램은"주입 "app.core"을 가지고, 그래서 모든 "app.core"서비스 등 공장 "응용 프로그램"모듈을 사용할 수 있습니다.

2) "app"모듈에 "app.widgets"도 삽입하면 "app"모듈이 액세스 할 수있는 모든 항목에 액세스 할 수 있습니다.

그래서 ->는 어딘가에 문서화 경우 경우, 액세스 잘 모르겠어요

을 app.core 얻을 app.widgets 응용 프로그램 액세스 & & app.widgets 앱에 액세스 할 수 app.core 다네 , 나는 그것을 읽고 싶다. 더 재미 물건이 스크립트를 확인 : 아이 모듈에서 푸의에 의해 오버라이드 (override)되어 있지 않은 경우 부모 모듈에 선언 된 그 foo는 것

http://plnkr.co/edit/Z8cZHJTekUa68eXuiCmW?p=preview

. 주입 모듈 모두 푸 이 경우, 후자가 사용된다 :

var app = angular.module("app", [ "app.core", "app.widgets"]); 

가 app.foo app.core.foo app.widgets.foo을 만든다. app.core.foo를 재정의합니다!

3

앱 모듈에 [ "app.widgets", "app.core"]의 두 가지 모듈을 포함하고 앱 내에 WidgetController을 사용하고 있습니다. app.widgets 모듈에 대한 명시적인 의존성을 만들지는 않지만, 앱 모듈이 app.core에 의존하기 때문에 모듈 app.core이 앱 모듈 내부의 foo 팩토리에 계속 액세스 할 수 있습니다. 당신이하려고하면 ,

<body ng-app="widgets "> 
    <ul ng-controller="WidgetController"> 
    <li ng-repeat="item in items"> 
     {{item}} 
    </li> 
    </ul> 
</body> 

이 늘 일, 당신의 ng-app="widgets"에 정의 된 공장 foo는 어디에도 없습니다 때문입니다. 이해하기 위해 앱 모듈을 두 모듈의 컨테이너로 생각하십시오. 모든 컨트롤러, 팩토리 등을 액세스 할 수있는 앱 모듈 자체의 일부인 것처럼 [ "app.widgets", "app.core"].

관련 문제