2014-07-20 4 views
1

angular-seed을 사용하여 각도 프로젝트를 시작했으며 index-async.html에서는 각도 로더와 script.js을 기본적으로 사용했습니다. 이 프로젝트에 두 개의 컨트롤러를 추가했습니다. 각 컨트롤러는 두 개의 개별 파일에 있습니다. 제 컨트롤러 파일은 다음과 같이 시작한다 :각도 로더 및 스크립트와 비동기 적으로 별도의 파일에 여러 컨트롤러로드

angular.module('myApp.controllers').controller('FirstCtrl', ... 

상기 제 2 제어부의 파일은 다음과 같이 시작한다 :

angular.module('myApp.controllers').controller('SecondCtrl', ... 

그리고 메인 app.js 파일 :

angular.module('myApp.controllers', []); 
angular.module('myApp', [ 
    'myApp.controllers' 
]) 

세 개의 파일이 모두 script.js에 추가되었습니다.

$script([ 
     'bower_components/angular/angular.js', 
     'bower_components/angular-route/angular-route.js', 

     'js/app.js', 

     'js/controllers/first-ctrl.js', 
     'js/controllers/second-ctrl.js', 
    ], function() { 
     angular.bootstrap(document, ['myApp']); 
    }); 
나는 응용 프로그램을 실행하면

는 때때로 작동하고, 가끔 오류를 얻을 :

Uncaught Error: [$injector:nomod] http://errors.angularjs.org/1.2.20/ $injector/nomod?p0=myApp.controllers

Error: [ng:areq] Argument 'FirstCtrl' is not a function, got undefined

참고. 간결함을 위해 나는 routeprovider를 생략했지만 FirstCtrl을 먼저 사용하여 경로로갑니다. SecondCtrl을 사용하여 경로를 다시 지정하면 비슷한 문제가 발생합니다.

너무 많은 각도의 씨앗으로 변경했다고 생각하지 않습니다. 컨트롤러를 추가 할 때 제대로 작동하는지 궁금합니다.

+0

확인'FirstCtrl' 올바른 당신됩니다. Controller ('FirstCtrl', function ($ scope) {}); 또한 로더가 비동기임을 유의하십시오. 따라서 앱 초기화 전에 컨트롤러를로드하는 경우가 있습니다. – akn

+0

@akn 그 이유는 각도 로더가 거기에 있다고 생각했기 때문입니다. 그래서 scriptjs는 임의의 순서로 각도 파일을로드 할 수 있습니다. – Steve

+0

@Steve 예, 예외는 있지만 모듈 선언 'angular.module ('myApp.controllers ', [])는 모듈 인스턴스를 다시 가져 오기 전에 실행해야합니다. '. – runTarm

답변

0

$ script.js v2 (아직 발표되지 않음)이 이미 병렬 스크립트로드를 지원하고 있지만 실행 순서도 유지된다는 것을 알았습니다.

아래 파일의 내용을 복사하여 업그레이드하고 이전 파일을 index-async.html으로 바꿀 수 있습니다.

https://github.com/ded/script.js/blob/v2/src/script.js

+0

지금까지 도와 줘서 고마워. 깨끗한 앵귤러 씨앗에 문제를 다시 재현하려고 시도했지만 할 수 없었습니다. https://github.com/ded/script.js/blob/master/dist/script.js를 의미합니까? (링크 된 스크립트는 3 년 전입니다.) 나는 최신 스크립트와 같은 문제를 시도했다. 아주 이상한. – Steve

+1

아니요,'v2' 브랜치의 코드를 의미합니다. [# 19] (https://github.com/ded/script.js/issues/19)를 참조하십시오. 'v2'는 아직 공개되지 않습니다. 그러나 그것이 3 살인 것을 본 후에, 나는 당신이 실행의 순서를 유지하는 것을 지원하는 또 다른 도서관을 찾기 시작해야한다고 생각합니다. [LAB.js] (http://labjs.com/), [Head.js] (http://headjs.com/) 또는 [require.js] (http : /requirejs.org/). – runTarm

+0

또 다른 해결 방법은 모듈 선언을'index-async.html'에 직접 넣거나, 다른 모든 스크립트보다'app.js'를 동 기적으로로드하고 성능을 저하시키지 않고 모든 모듈 선언을 그곳에. – runTarm