私は単一ページ アプリケーションで角度を使用していませんが、ロード オーダーの問題により、メイン アプリ モジュールを一度定義したいと考えています。同時に、すべてのJSファイルがすべてのページにロードされるわけではないため、モジュールをページごとに注入/要求したいと考えています。
必須モジュールなしでアプリを定義できますか:
app = angular.module("アプリ", [])
それらはコントローラーから注入されますか、それとも後の段階で注入されますか?
私は単一ページ アプリケーションで角度を使用していませんが、ロード オーダーの問題により、メイン アプリ モジュールを一度定義したいと考えています。同時に、すべてのJSファイルがすべてのページにロードされるわけではないため、モジュールをページごとに注入/要求したいと考えています。
必須モジュールなしでアプリを定義できますか:
app = angular.module("アプリ", [])
それらはコントローラーから注入されますか、それとも後の段階で注入されますか?
いいえ、現時点では公式にはサポートされていません。AngularJS アプリケーションをブートストラップする前に、すべてのモジュールをブラウザーにロードする (そしてメインのアプリケーション モジュールの依存関係として宣言する) 必要があります。
Tiago の素晴らしいアイデア (彼に賛成票を投じてください!) を使用して、モジュールに次のように記述します。
window.dependencies = _.union(window.dependencies || [], [
"ngRoute",
"app.mymodule1"
]);
angular
.module("app.mymodule1", [])
.config(["$routeProvider", function ($routeProvider) {
// more code
}]);
そしてこれは私のapp.js
:
var app;
window.dependencies = _.union(window.dependencies || [], [
"ngRoute",
"app.anothermodule"
]);
window.app = app = angular.module("app", window.dependencies);
私は LoDash を使用しているので、依存関係を結合app.js
して一意の値の配列を取得します。一部のモジュールは、ngRoute
.
body
私のスクリプトは、タグの下部に次のように含まれています。
<!-- scripts from other pages/modules included here -->
<script src="/js/anothermodule/anothermodule.js"></script>
<script src="/js/app.js"></script>
魔法のように動作します!
私のページは「マスター」ページを共有していますが、独自のファイルにモジュール定義があるため、このようなものが必要でした。
あまり美しくないことはわかっていますが、次のことはどうでしょうか。
var injectedDependencies = [.....];
angular.prevmodule = angular.module;
angular.module = function(name, params){
if(params){
params.push(injectedDependencies);
}
return angular.prevmodule.apply(angular, arguments);
}
編集: これは、アプリがモジュールを認識せずにモジュールを注入する場合 (たとえば、ログ、監視、セキュリティなど) に役立ちますが、アプリケーションがブートストラップされた後にモジュールを注入する場合には役立ちません。
私は同じ問題に苦しんでいます。http://blog.getelementsbyidea.com/load-a-module-on-demand-with-angularjs/はあなたが望むことをするかもしれないと思います。
その github https://github.com/ocombe/ocLazyLoadで、以下を見つけることができます。
AppCtrl.js
AppCtrl.js
後でグリッドhttps://github.com/ocombe/ocLazyLoad/blob/master/examples/example1/js/AppCtrl.js#L28を実行時に (そして非同期で) ロードします! ほらこれは少し複雑に見えるかもしれませんが、実行時にそれらをロードすることに本当に関心がある場合は、手動で手動で変更することを除いて、これが唯一の解決策かもしれません_invokeQueue
。