2016-09-23 2 views
0

저는 Angular로 개발하고있는 간단한 응용 프로그램을 가지고 있습니다. 가능한 한 아래를 단순화했습니다. 나는 globally available library injectible (특히 특별한 아무것도)하지 않습니다 시도하고있다 :모듈 간 통신, 각도 Js, 팩토리

app.module.js 파일은 다음과 같이 간단하게 정의

다음과 같이

angular.module('dogApplication', [ 
    'dogModule', 
    'dogSelection' 
]); 

index.html 파일은 정의 (읽기 쉽 냈네) :

<html lang="en" ng-app="dogApplication"> 
    <head> 
     <!-- ... --> 
     <script src="app/app.module.js"></script> 
     <script src="app/dogs/dog.module.js"</script> 
     <script src="app/dogs/dog.factory.js"</script> 
     <script src="app/dogSelection.module.js"></script> 
     <!-- controllers then imported --> 
    </head> 
    <body> 
     <!-- content --> 
    </body> 
</html> 

.module 파일은 각 추가 구성 요소, 컨트롤러, 팩토리 등이 첨부 된 모듈을 정의하며 app.module.js은 "기본"모듈 첨부 파일입니다.

angular 
    .module('dogModule') 
    .factory('dog', function($window) { 
     // do logic defined by James Hill in linked article 
     return friendly; 
    }); 

내가 다음 컨트롤러가 : 다음과 같이

dog.factory.js

는 정의 된 응용 프로그램에 액세스 할 때

angular 
    .module('dogSelection') 
    .controller('dogSelectionController', ['$scope', 'dog', function ($scope, dog) { 
     if (dog) 
     { 
      console.log('it worked'); 
     } 
    }]) 

가, 나는 싸구려 오류 메시지를 그 나는 확실히 해결할 수 있습니다

angular.js:13920 Error: [$injector:unpr] Unknown provider: dogProvider <- dog <- dogSelectionController 
http://errors.angularjs.org/1.5.8/$injector/unpr?p0=dogProvider%20%3C-%20dog%20%3C-%20dogSelectionController 
    at angular.js:68 
    at angular.js:4511 
    at Object.getService [as get] (angular.js:4664) 
    at angular.js:4516 
    at getService (angular.js:4664) 
    at injectionArgs (angular.js:4688) 
    at Object.invoke (angular.js:4710) 
    at $controllerInit (angular.js:10354) 
    at nodeLinkFn (angular.js:9263) 
    at angular.js:9673 

위의 설정 방식대로은 서비스가 DI를 통해 dogSelectionController에 제공되지 않습니까?

.factory(//... 메서드의 코드는 제어기 정의의 끝에 첨부 할 수 있으므로이 코드는 잘 작동합니다. 그러나 응용 프로그램에서 사용할 수있는 공장을 원합니다. 이것이 가능한가?

+0

당신은 주입 배열에서'전단지 '로 정의했지만 실제 매개 변수에서는'dog'라고 정의했습니다. 나는 그들이 일하는 것에 부합해야한다고 생각합니다. – Lex

+0

@Lex 그들은 일치 할 필요가 없습니다. 유일한 제한은 문자열의 이름이 – gmustudent

+0

@Lex에서 오는 모듈의 실제 서비스 이름과 일치해야한다는 것입니다.이 오류는 게시 오류입니다. 죄송합니다. 나는 그것을 고쳐야한다.더 널리 적용되도록 노력하고 있습니다. – Thomas

답변

0

첫 번째 문제는 모듈 다음에 배열이 필요하다는 것입니다. 모듈 종속성이없는 경우에도. 그래서 .module('dogSelection', [])이 아닙니다. .module('dogSelection') - 다음 문제는 주사하기 전에 모듈을 정의해야한다는 것입니다. dob가 개에서 오는 부분을 정의하는 모듈이 없으면 보는 것과 같은 오류가 발생합니다. 이

모듈 식으로 뭔가 :

angular.module('dogModule', []) 

.factory('dog', function($window) 
{ 

}); 

컨트롤러 :

angular.module('dogSelection', [ 
    'dogModule' 
]) 

.controller('dogSelectionController', ['$scope', 'dog', function ($scope, dog) 
{ 

}]); 
+0

모듈은 다른 곳에서 선언되었다. . 여기에'[]'를 포함하면 모듈이 무시됩니다. 다시, 정의는 다른 곳에서 OP별로 (간결함을 제외하고, index.html을 제외하고) 발생합니다. – Thomas

+0

@ 토마스 죄송합니다. 귀하의 게시물을 너무 빠르게 읽고 리플 릿을 통해 나를 읽습니다. 나는 지금 내가 무엇을 찾았는지에 관해서는 ur lookin일지도 모른다라고 생각한다 – gmustudent

+0

문제 없음. 그것을 통해 지금 일하십시오. 지금 모든 종류의 펑키 오류가 발생합니다. 내가 뭘 잘못하고 있는지 전혀 모른다. 아. – Thomas

0

'dogSelectionController' 인젝터가 ['$scope', 'leaflet'에서 ['$scope', 'dog'로 변경해야 같은데. 개 공장의 이름은 'leaflet'이 아닙니다.

업데이트 : 공유 공장에 대한 해결 방법으로

직접 주요 응용 프로그램 모듈의 공장을 가지고하는 것입니다. 지금 내 모바일에 있으므로 더 나은 답변을 드릴 수 없습니다.

+0

질문이 업데이트되었습니다. 감사. – Thomas