试图加载Angular多次

Kyl*_*yle 73 javascript angularjs gruntjs

我有一个yeoman脚手架应用程序(角度fullstack生成器).

grunt serve工作正常,但grunt build产生一个锁定内存的分布,很可能是因为角度的圆形引用.

我将角度升级为1.2.15.我得到的错误是:

WARNING: Tried to Load Angular More Than Once

在升级之前,错误是:

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

调试非常困难,因为它只在构建/缩小后才会发生.我的所有模块都采用角度阵列格式,因此缩小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');
Run Code Online (Sandbox Code Playgroud)

Kyl*_*yle 143

这可能是一些问题:基本上它是routeProvider没有找到文件并递归加载默认值的问题.

对我而言,事实证明,这不是缩小,而是导致问题的js的连接.

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

您会注意到,如果应用程序找不到文件(即otherwise),那么它将重定向到根目录,在这种情况下会加载templateUrl.但如果你templateUrl的错误,那么它将导致一个递归,重复index.html加载角度(和其他一切)反复.

就我而言,grunt-concat在构建之后导致templateUrl出错,但之前没有.

  • 用于简单解释的+1:"基本上,这是routeProvider找不到文件并递归加载默认值的问题." (4认同)

gra*_*ant 16

当$ templateCacheProvider尝试解析templateCache中的模板或通过不存在的项目目录时,可能会发生此问题

例:

templateUrl: 'views/wrongPathToTemplate'
Run Code Online (Sandbox Code Playgroud)

应该:

templateUrl: 'views/home.html'
Run Code Online (Sandbox Code Playgroud)

  • 也许这对某人有帮助,我在合并后删除了一些模板时遇到了这个错误:`<div ng-include ="'path_to_not_existing_template'"> </ div>` (2认同)

Chr*_*ese 14

似乎没有人在任何地方提到过这个,所以这就是触发它的原因:我的身体上有ng-view指令.像这样改变它

<body layout="column">
<div ng-view></div>
...
</body>
Run Code Online (Sandbox Code Playgroud)

停止了错误.


Som*_*ens 13

这根本没有任何关系app.js.相反,当您多次包含Angular JS库时,会记录此警告.

我设法重现了这个JSBin中的错误.请注意两个脚本标记(两个不同的版本):

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

GitHub上的相关角度代码.

  • 是的,这有道理,但它确实与我的案例中的app.js有关 - 我刚刚发布了我的发现. (4认同)

Mah*_* K. 6

我有同样的问题,问题是JQuery和Angular之间的冲突.Angular无法为自己设置完整的JQuery库.由于JQLite在大多数情况下已经足够了,我首先在我的网页中包含了Angular,然后我加载了Jquery.错误消失了.


jGu*_*pta 6

在我的情况下,我在页面上使用jquery和angular js时遇到此错误.

<script src="http://code.jquery.com/jquery-2.1.3.min.js" type="text/javascript"></script>
<script src="js/angular.js" type="text/javascript"></script>
<script src="js/angular-route.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

我删除了 :

<script src="http://code.jquery.com/jquery-2.1.3.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

警告消失了.

  • 如果出现此警告,则表示您可能尝试递归加载页面.如果你删除JQuery警告可能会消失,但问题可能仍然会发生,这实际上更糟. (3认同)

Kum*_*ham 6

我也面临这样一个问题,我不断得到一个无限循环,页面无限重新加载.经过一些调试后我发现错误是由于,因为该文件不存在于该文件中,因此,angular 无法加载给定的特定ID模板.

小心你在角度应用程序中给出的url.如果它不正确,角度最终可以继续寻找它,导致无限循环!

希望这可以帮助!

  • 精彩!节省了许多小时/天/月的调试:) (2认同)

gil*_*tic 5

今天遇到这个问题并想通知我会如何修复它.在我的情况下,我有一个index.html页面:

<body ng-app="myApp" ng-controller="mainController"
   <div ng-view></div>
</body>
Run Code Online (Sandbox Code Playgroud)

在我的app.js文件中,我有以下代码:

$routeProvider.when('/', {
    controller : 'mainController',
    templateUrl : 'index.html',
    title : 'Home'
  }).when('/other', {
    controller : 'otherController',
    templateUrl : 'views/other.html',
    title : 'other'
  }).otherwise({
    redirectTo : '/'
  });
Run Code Online (Sandbox Code Playgroud)

结果,当我进入页面(base_url /)时,它加载了index.html,并在ng-view中再次加载了index.html,并在该视图中再次加载了index.html ...依此类推 - 创建index.html的无限递归加载(每次加载角度库).

要解决所有我必须做的就是从routProvider中删除index.html - 如下所示:

$routeProvider.when('/other', {
    controller : 'otherController',
    templateUrl : 'views/other.html',
    title : 'other'
  }).otherwise({
    redirectTo : '/'
  });
Run Code Online (Sandbox Code Playgroud)