2016-06-16 10 views
-1

モジュールの作成を遅らせようとしていますが、動作しません(Chromeを使用しています)。私はsetTimeoutを削除し、単にinitApp()を呼び出す場合はここに私のコードTRY THE JSFIDDLEタイムアウトが機能していない状態で角モジュールを作成する

<!doctype html> 
<html> 
<head> 
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular.min.js"> </script> 
</head> 
<body> 
<div ng-controller="MyCtrl"> 
    Hello, {{name}}! 
</div> 
<script> 
    //initApp(); 
    setTimeout(initApp, 1000); 

    function initApp() { 
     var myApp = angular.module('myApp', []); 
     myApp.controller('MyCtrl', 
      function($scope) { 
       $scope.name = 'Superhero'; 
      }); 
    } 
</script> 
</body> 
</html> 

あり、それは動作します。なぜ誰かが説明できますか?

角度アプリをページに埋め込もうとしていますが、スクリプトタグをHEADに追加することはできません。だから、への何らかの方法を理解する必要があります。 angular.min.jsがロードされ、解析されるまで、角モジュールの初期化を延期してください。

答えて

2

どのように角度をつけて行うのではありません。

まず、ng-appタグが表示されないので、あなたのコントローラーは呼び出されません。

(NG-appタグを使用していない)ブートストラップを遅らせるために、第二には、あなたがangular.boostrap使用:JavaScriptのファイルを参照の動的ロードについては

//initApp(); 
setTimeout(initApp, 1000); 
var myApp = angular.module('myApp', []); 
    myApp.controller('MyCtrl', 
     function($scope) { 
      $scope.name = 'Superhero'; 
     }); 
function initApp() { 
    angular.bootstrap('myApp'); 
} 

を:lazy loading javascriptの著者の第二の点投稿は仕事をするべきです。

+0

パーフェクト。これが私が最後に解決した方法です。しかし私の 'initApp'では' if(angular == null) 'をテストしてから再びsetTimeoutを返して戻ります。また、私は100ミリ秒を使用します。これで、スクリプトの順序について心配することなく、あらゆるページに角を埋め込むことができます。 –

1

setTimeoutを使用する必要はありません。ブラウザは、async属性が使用されていない限り、HTMLで宣言されている順序でJavaScriptを解析します。

関連する問題