以下は、アプリケーションをブートストラップする前に構成ファイルをロードする例です。
ブートストラップへの最初の呼び出しは、$http や $location などの角度付きサービスにアクセスするために行われます (この時点で独自のモジュールを挿入して、カスタム サービスにアクセスすることもできます)。
構成ファイルがロードされた後、メイン アプリケーションに対して angular.bootstrap が呼び出され、ロードされた構成が注入されたその場しのぎのモジュール (rsacAppBootstrap) の定数として設定されます。
実行ブロックから設定された promise を使用することよりも、少なくとも 2 つの利点があります。
- 構成に依存するすべての約束のボイラープレートの削減
- RequireJS を使用して、環境に基づいて条件付きで依存関係を読み込む機能
カスタム ブートストラップ スクリプト:
angular.bootstrap().invoke(function ($http, $location) {
var env = $location.search()._env || null;
if (env === true) {
env = null;
}
var configUri = 'config/env.json';
if (env) {
configUri = configUri.replace('json', env + '.json');
}
var rsacAppBootstrap = angular.module('rsacAppBootstrap', [])
.run(function ($rootScope, $location, $window) {
var env = $location.search()._env;
$rootScope.$on('$locationChangeSuccess', function () {
var newEnv = $location.search()._env;
if (env !== newEnv) {
$window.location.reload();
}
})
});
function bootstrap(config) {
rsacAppBootstrap.constant('rsacConfig', config || {});
angular.element(document).ready(function () {
var modules = ['rsacApp', 'rsacAppBootstrap'];
if (config.modules){
config.modules.forEach(function(v){
modules.push(v);
})
}
angular.bootstrap(document, modules);
});
}
$http.get(configUri)
.success(function (config) {
config._env = env;
if (config.require) {
require(config.require, function(){
bootstrap(config);
});
} else {
bootstrap(config);
}
})
.error(function () {
bootstrap();
});
});
構成ファイルの例:
{
"_meta": [
"Development environment settings"
],
"require":[
"//code.angularjs.org/1.2.3/angular-mocks.js",
"components/rsacMock/js/rsacMock.js"
],
"modules":[
"ngMockE2E",
"rsacMock"
],
"resources": { ... }
}