12

私は単一ページ アプリケーションで角度を使用していませんが、ロード オーダーの問題により、メイン アプリ モジュールを一度定義したいと考えています。同時に、すべてのJSファイルがすべてのページにロードされるわけではないため、モジュールをページごとに注入/要求したいと考えています。

必須モジュールなしでアプリを定義できますか:

app = angular.module("アプリ", [])

それらはコントローラーから注入されますか、それとも後の段階で注入されますか?

4

6 に答える 6

8

いいえ、現時点では公式にはサポートされていません。AngularJS アプリケーションをブートストラップする前に、すべてのモジュールをブラウザーにロードする (そしてメインのアプリケーション モジュールの依存関係として宣言する) 必要があります。

于 2013-07-30T07:55:37.370 に答える
6

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>

魔法のように動作します!

私のページは「マスター」ページを共有していますが、独自のファイルにモジュール定義があるため、このようなものが必要でした。

于 2013-12-20T09:45:43.663 に答える
0

あまり美しくないことはわかっていますが、次のことはどうでしょうか。

var injectedDependencies = [.....];
angular.prevmodule = angular.module;
angular.module = function(name, params){
    if(params){
        params.push(injectedDependencies);
    }
    return angular.prevmodule.apply(angular, arguments);
}

編集: これは、アプリがモジュールを認識せずにモジュールを注入する場合 (たとえば、ログ、監視、セキュリティなど) に役立ちますが、アプリケーションがブートストラップされた後にモジュールを注入する場合には役立ちません。

于 2014-09-12T13:22:55.540 に答える
0

私は同じ問題に苦しんでいます。http://blog.getelementsbyidea.com/load-a-module-on-demand-with-angularjs/はあなたが望むことをするかもしれないと思います。

その github https://github.com/ocombe/ocLazyLoadで、以下を見つけることができます。

  1. 注入される唯一のアプリは app https://github.com/ocombe/ocLazyLoad/blob/master/examples/example1/index.html#L2であること
  2. アプリはhttps://github.com/ocombe/ocLazyLoad/blob/master/examples/example1/js/app.js#L24を読み込んでいますAppCtrl.js
  3. AppCtrl.js後でグリッドhttps://github.com/ocombe/ocLazyLoad/blob/master/examples/example1/js/AppCtrl.js#L28を実行時に (そして非同期で) ロードします! ほら

これは少し複雑に見えるかもしれませんが、実行時にそれらをロードすることに本当に関心がある場合は、手動で手動で変更することを除いて、これが唯一の解決策かもしれません_invokeQueue

于 2014-09-19T20:26:17.633 に答える