パーツを動的に有効/無効にできる 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
現在、どう進めていいのか途方に暮れています。Web上で解決策を見つけることができませんでした。アプリは jsFiddle に入れるには大きすぎますが、必要に応じて GitHub で最後の変更をコミットできます。
質問: これは実現可能ですか? これをデバッグするにはどうすればよいですか? 私が見ることができる例はありますか?
編集: コードはhttps://github.com/jcw/housemonにあります(node/npm/redis が必要です)。問題を再現するのは簡単です。「npm start」で起動し、localhost:3333 を参照し、「admin」タブに移動し、「jcw-sandbox」をクリックしてから「Install」をクリックします。トップメニューは、新しい「サンドボックス」エントリで更新されます。そのエントリをクリックすると、上記のエラーが生成されます。
ああ、ほとんど忘れていました: 関連するコードは client/code/app/main.coffee と client/code/modules/routes.coffee にあります ...