2013-01-22 2 views
1

부품을 동적으로 활성화/비활성화 할 수있는 NG 응용 프로그램을 만들려고합니다. 아이디어는 앱의 일부를 사용 또는 사용 중지 할 수있는 "admin"페이지를 가지고 페이지의 상단에 조정 된 메뉴의 형태로 새로운 기능이 나타나고 라우트, 컨트롤러 등이 일치하는 것을 볼 수 있습니다. 응용 프로그램에로드 (나는 SocketStream w/NG 사용하고 있습니다).나중에 컨트롤러 추가

첫 번째 단계는 동적으로 경로를 추가/제거하는 것이 었습니다. 그 해결책은 https://stackoverflow.com/a/13173667입니다. 제대로 작동하는 한 알 수 있습니다.

다음으로 메뉴 모음에 항목을 추가하십시오. ul/li 항목에서 ng-repeat를 사용하면 쉽게 할 수 있습니다.

그래서 앱이 메뉴를 조정하고 해당 경로를 인식합니다. 여태까지는 그런대로 잘됐다.

컨트롤러를 등록 할 때 문제가 발생합니다. 적절한 args를 가진 myApp.controller('SandboxCtrl',[...]) (시작시에 정적으로 초기화 할 때와 똑같은 함수)을 호출하고 있지만, 컨트롤러가 올바르게로드되거나 삽입되지 않은 것 같습니다. 새로 추가 된 경로를 탐색하면 다음과 같은 오류가 발생합니다.

Error: Argument 'SandboxCtrl' is not a function, got undefined 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:973 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:984 
@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:4638 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:14007 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:8098 
@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7258 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:6658 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:6658 
@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:6695 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7848 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7713 
[email protected]://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7934 
@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:5433 

현재 진행 방법을 놓치고 있습니다. 나는 웹상에서 해결책을 찾을 수 없었다. 앱이 너무 커서 jsFiddle을 넣을 수 없지만 필요한 경우 GitHub의 마지막 변경 사항을 커밋 할 수 있습니다.

질문 : 가능한가요? 이걸 디버깅하려면 어떻게해야합니까? 내가 볼 수있는 모든 예제?

편집 : 코드는 이제 https://github.com/jcw/housemon (노드/npm/redis 필요)입니다. 문제를 재현하는 것은 간단합니다 : "npm start"로 시작하고, localhost : 3333으로 가서, admin 탭으로 가서 "jcw-sandbox"를 클릭 한 다음 "Install"을 클릭하십시오. 톱 메뉴가 새로운 "샌드 박스"항목으로 업데이트됩니다. 해당 항목을 클릭하면 위에 표시된 오류가 생성됩니다.

오, 거의 잊었다 : 관련 코드는 ... 클라이언트/코드/응용 프로그램/main.coffee 및 클라이언트/코드/모듈/routes.coffee에

+1

코드가 제공되지 않으면 도움이 어렵습니다. – mpm

+0

SandboxCtrl이 포함 된 JavaScript 파일을로드하고 있습니까? – WiredPrairie

+0

안녕하세요, 게으른로드 컨트롤러를 등록하려면 $ controllerProvider를 사용해야합니다. 나는 (RequireJS와 함께) 요구에 따라 컨트롤러를로드하고 등록하는 솔루션을 가지고있다. 내 저장소를 여기에서 확인하십시오 : https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

답변

0

대답은 두 가지로 밝혀 :

  • NG 통화 는 SocketStream RPC 콜백에서 만든, 및 $ 범위에 싸여해야했다 있었다 $ 통화를 적용 -. 내 나쁜 솔루션의 나머지이었다이 SS/NG 상호 작용
  • 에 대해 알고하지 않았다 @ matys84pl에 의해 개설 됨 - 초기에 $ controllerProvider (및 $ filterProvider)를 가져와 정상적인 "app.controller"대신 나중에 호출 할 수 있습니다. 및 GitHub의에서

예제 코드에 더 이상 나중에 작동하지 않는 것 "app.filter"회원, 내가 특정 링크 것이다 커밋 그래서이 답변이 유효하게 유지되는 :

https://github.com/jcw/housemon/commit/f199ff70e3000dbf57836f0cbcbb3306c31279de

관련 문제