1. ホーム
  2. javascript

Angularを複数回読み込もうとする

2023-10-25 22:43:29

質問

私はyeoman scaffoldedアプリ(angular fullstackジェネレータ)を持っています。

grunt serve は問題なく動作しますが grunt build はメモリをロックするディストリビューションを生成します。おそらく、angularの循環参照が原因でしょう。

私はangularをアップグレードして 1.2.15 . というエラーが出ます。

WARNING: Tried to Load Angular More Than Once

アップグレード前は、エラーになりました。

Error: 10 $digest() iterations reached. Aborting!

ビルド/ミニフィケーションの後にしか発生しないので、デバッグはかなり困難です。 私のモジュールはすべてangularの配列形式なので、minification DIは問題にならないはずなのですが、そうなっています。

これを引き起こす単一のスクリプトはありません。 唯一の方法は、私のapp.jsファイルで初期化しない場合です。 私の app.js ファイルは以下の通りです。

何か思い当たることはありますか?

'use strict';

angular.module('myApp', [
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute',
  'ngTagsInput',
  'ui.bootstrap',
  'google-maps',
  'firebase'
]);

angular.module('myApp').config(['$routeProvider', function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/listing.html',
        controller: 'ListingCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  }]).constant('FIREBASE_URL', 'something');

どのように解決するのですか?

これはいくつかの問題が考えられます。本質的には、routeProviderがファイルを見つけられず、再帰的にデフォルトを読み込むという問題です。

私の場合、minificationではなく、jsの連結が問題を引き起こしていることがわかりました。

angular.module('myApp').config(['$routeProvider', function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/listing.html',
        controller: 'ListingCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  }]).constant('FIREBASE_URL', 'something');

アプリがファイルを見つけられない場合(つまり otherwise ) が見つからない場合、ルートにリダイレクトされることがわかります。 templateUrl . しかし、もしあなたの templateUrl が間違っていると、再帰を引き起こして index.html を何度も何度も読み込むことになります。

私の場合、grunt-concatによって、ビルド後にtemplateUrlがおかしくなりましたが、ビルド前は変わりませんでした。