魅力的な読み込みについて多くのことを読んでいますが、$ routeProviderを使用しているときに問題が発生しています。AngularJSコントローラを動的にロードする
私の目標は、コントローラーを含むjavascriptファイルをロードし、以前にロードされたこのコントローラーにルートを追加することです。角度bootstapが呼び出されたときに
angular.module('demoApp.modules').controller('MouseTestCtrlA', ['$scope', function ($scope) {
console.log("MouseTestCtrlA");
$scope.name = "MouseTestCtrlA";
}]);
にこのファイルをロードするために私のJavaScriptファイルの
コンテンツが含まれていません。つまり、ファイルをロードしてこのコントローラへのルートを作成する必要があります。
まず、Javascriptファイルをロードする必要がある解決機能を作成しました。しかし、私のコントローラのパラメータは私にエラーを与えたルート宣言で宣言:
「MouseTestCtrlA」の関数ではありません、ここでは未定義
を得たことは、私が設定しようとしています呼び出しです:
demoApp.routeProvider.when(module.action, {templateUrl: module.template, controller: module.controller, resolve : {deps: function() /*load JS file*/} });
私が読んだものから、 は、コントローラのパラメータが登録され、コントローラ
詐欺でなければなりませんtroller - {(string | function()=} - 新しく作成されたスコープに関連するコントローラfnまたは文字列として渡された場合に登録されたコントローラの名前。
私は私のファイルをロードできるはずです。そして、私は新しいルートを宣言しようとします。
それは私に依存関係が負荷にJavaScriptファイルパスの配列です以下のようなものが得られた:
使用
ScriptLoader.load(module.dependencies).then(function() {
demoApp.routeProvider.when(module.action, {templateUrl: 'my-template', controller: module.controller});
});
スクリプトローダ
angular.module('demoApp.services').factory('ScriptLoader', ['$q', '$rootScope', function ($q, $rootScope) {
return {
load: function (dependencies)
{
var deferred = $q.defer();
require(dependencies, function() {
$rootScope.$apply(function() {
deferred.resolve();
});
});
return deferred.promise;
}
}
}]);
問題
"MouseTestCtrlA 'は関数ではありません。未定義です。つまり、Angularは登録されたコントローラとして' MouseTestCtrlA 'を解決できませんでした。
誰でもこの時点で私を助けてくれますか?
ありがとう、私はしばらくの間これを探していました。うまくいけば角度の機能バージョンは、コントローラが動的に読み込まれるようにレジスタ関数を公開する方法を見つけるでしょう。 – ltfishie
私はあなたが使用することをお勧めします角カウチポテト。コントローラ/ファクトリ/サービス/ etcを遅延登録します。 [github](https://github.com/castawaylabs/semaphore)に書いた公開アプリ(Require + Angular + UIRouter)。 –
このコードは私の夕方を保存しました:) – Yasser