我正在尝试创建一个可以动态启用/禁用部分的 NG 应用程序。这个想法是有一个“管理”页面,可以启用或禁用应用程序的某些部分,然后看到新功能以页面顶部调整菜单的形式出现,并匹配路由、控制器等加载到应用程序中(我正在使用带有 NG 的 SocketStream)。
第一步是动态添加/删除路由,为此我在https://stackoverflow.com/a/13173667找到了一个解决方案- 据我所知,效果很好。
接下来,将项目添加到菜单栏 - 在 ul/li 项目上使用 ng-repeat 很容易。
因此应用程序调整其菜单并识别相应的路线。到目前为止,一切都很好。
问题来自注册控制器。我myApp.controller('SandboxCtrl',[...])
使用正确的参数调用(与启动时静态初始化时的工作相同),但控制器似乎没有正确加载或初始化。导航到新添加的路由会产生错误,例如:
Error: Argument 'SandboxCtrl' is not a function, got undefined
assertArg@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:973
assertArgFn@http://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
update@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:14007
$broadcast@http://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
wrappedCallback@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:6658
wrappedCallback@http://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
$eval@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7848
$digest@http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js:7713
$apply@http://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,进入管理选项卡,单击“jcw-sandbox”,然后单击“安装”。顶部菜单将更新为新的“沙盒”条目。单击该条目会生成上面显示的错误。
哦,差点忘了:相关代码在 client/code/app/main.coffee 和 client/code/modules/routes.coffee ...