angular.resumeBootstrapの再考

2015-02-09T00:00:00+09:00 JavaScript angular.js

以前もちょっとだけangular.resumeBootstrapについて書いてたけどざっくりしてるし改めて色々やってみた

要件

angularアプリケーションを初期化する際にngDialogを使ってモーダルダイアログを出すってだけ

なのでngDialogで必要なngDialog.jsとngDialog.cssとngDialog-theme-default.css等を別途取ってくる

index.html

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="ngDialog.css" />
    <link rel="stylesheet" type="text/css" href="ngDialog-theme-default.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.js"></script>
    <script src="ngDialog.js"></script>
    <script src="main.js"></script>
  </head>
  <body>
    <div ng-controller="SampleCtrl" ng-cloak>
      {% raw %}{{msg}}{% endraw %}
    </div>
  </body>
</html>

main.js

window.name = 'NG_DEFER_BOOTSTRAP!';

angular.module('sample', ['ngDialog'])
  .controller('SampleCtrl', ['$scope', function($scope) {
    console.log('SampleCtrl');
    $scope.msg = 'hoge';
  }]);

angular.element().ready(function() {
  angular.bootstrap(document, ['sample']);
  angular.injector(['ng', 'ngDialog']).invoke(['ngDialog', function(ngDialog) {
    var dialog = ngDialog.open({
      template: 'modal.html',
      showClose: false,
      overlay: false
    });

    angular.resumeBootstrap();

    setTimeout(function() {
      dialog.close();
    }, 3000);
  }]);
});

っていう感じでやれば良いっぽい。angular.injectorを使ってngDialogを取ってきてそれを使ってモーダルダイアログを出したあとにresumeBootstrap、そしてちょいとしたらngDialog.closeするっていう感じ

resumeBootstrapするタイミングが若干違うけどjsdo.itにうpしておいたサンプルが以下

Polymerをやってみた Java EE Batch Processingに触ってみた (2) - Batchlet -