89

既にブートストラップされた角度モジュールに遅延依存関係を挿入する方法はありますか? これが私が意味することです:

次のように定義された、サイト全体の角度のあるアプリがあるとします。

// in app.js
var App = angular.module("App", []);

そして、すべてのページで:

<html ng-app="App">

後で、アプリを再度開いて、現在のページのニーズに基づいてロジックを追加します。

// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
  // .. reports controller code
}])

ここで、これらのオンデマンド ロジックのビットの 1 つにも、独自の依存関係 ( 、 、 など) が必要であるとngTouchngAnimateますngResource。それらをベースアプリに添付するにはどうすればよいですか? これはうまくいかないようです:

// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped

私は事前にすべてを行うことができることに気づきました-つまり-

// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);

または、すべてのモジュールを独自に定義してから、すべてをメイン アプリに挿入します (詳細については、こちらを参照してください)。

// in reports.js
angular.module("Reports", ['ui.event', 'ngResource'])
.controller("ReportsController", ['$scope', function($scope) {
  // .. reports controller code
}])

// in home.js
angular.module("Home", ['ngAnimate'])
.controller("HomeController", ['$scope', '$http', function($scope, $http){
  // ...
}])

// in app.js, loaded last into the page (different for every page that varies in dependencies)
var App = angular.module("App", ['Reports', 'Home'])

ただし、これには、現在のページの依存関係を使用して毎回アプリを初期化する必要があります。

私はすべてのページに基本的なものを含め、必要な拡張機能 ( 、など)app.jsを各ページに簡単に導入することを好みます。何かを追加または削除するたびにブートストラップ ロジックを修正する必要はありません。reports.jshome.js

アプリが既にブートストラップされている場合に依存関係を導入する方法はありますか? これを行うための慣用的な方法 (または方法) と見なされるものは何ですか? 私は後者の解決策に傾いていますが、私が説明した方法も実行できるかどうかを確認したかったのです。ありがとう。

4

6 に答える 6

115

私はこのようにそれを解決しました:

アプリを再度参照します。

var app = angular.module('app');

次に、新しい要件を要件配列にプッシュします。

app.requires.push('newDependency');
于 2015-02-04T07:20:42.383 に答える
12

シンプル...次のようにゲッターを使用してモジュールのインスタンスを取得します: var app = angular.module("App");

次に、次のように「requires」コレクションに追加します。 app.requires[app.requires.length] = "ngResource";

とにかく、これは私のために働いた。幸運を!

于 2015-01-04T17:27:47.457 に答える
9

Angular JS google グループのこの提案によると、この機能は現時点では存在しません。コア チームがこの機能を追加することを決定し、自分で使用できることを願っています。

于 2013-11-01T02:16:22.917 に答える
4

一度に複数の依存関係を追加したい場合は、次のようにプッシュで渡すことができます。

<script>
    var app = angular.module('appName');
    app.requires.push('dependencyCtrl1', 'dependencyService1');
</script>
于 2015-06-21T10:51:50.417 に答える