2013-01-22 91 views
1

我試圖創建一個NG應用程序,其中可以動態地啓用/禁用部件。這個想法是有一個「管理」頁面,其中的部分應用程序可以啓用或禁用,然後看到新的功能出現,在頁面頂部的調整菜單的形式和匹配的路線,控制器等加載到應用程序中(我正在使用SocketStream w/NG)。稍後添加控制器

第一步是動態地添加/刪除路由,爲此我找到了一個解決方案https://stackoverflow.com/a/13173667 - 據我所知,運行良好。

接下來,將項目添加到菜單欄 - 使用ul-li項目的ng-repeat輕鬆實現。

因此,該應用程序調整其菜單並識別相應的路線。到現在爲止還挺好。

問題出現在註冊控制器。我打電話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(需要node/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」和「app.filter」的成員,這似乎並不在GitHub上

示例代碼了以後的工作中,我將鏈接到一個特定犯所以這個答案保持有效:

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

如果沒有提供代碼,