我有一个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');
答案 0 :(得分:142)
这可能是一些问题:本质上它是routeProvider找不到文件并递归加载默认值的问题。
对我而言,事实证明它并非缩小,而是连接引起问题的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出错,但之前没有。
答案 1 :(得分:16)
当$ templateCacheProvider尝试解析templateCache中的模板或通过不存在的项目目录
时,可能会出现此问题示例:
templateUrl: 'views/wrongPathToTemplate'
应该是:
templateUrl: 'views/home.html'
答案 2 :(得分:14)
似乎没有人在任何地方提到这一点,所以这就是触发它的原因: 我的身体上有ng-view指令。像这样改变
<body layout="column">
<div ng-view></div>
...
</body>
停止了错误。
答案 3 :(得分:12)
这与app.js
根本没有任何关系。相反,当您多次包含Angular JS库时会记录此警告。
我设法在this 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>
GitHub处的相关角色代码。
答案 4 :(得分:6)
我有同样的问题,问题是JQuery和Angular之间的冲突。 Angular无法为自己设置完整的JQuery库。由于JQLite在大多数情况下已经足够了,我首先在我的网页中包含了Angular,然后我加载了Jquery。那时错误消失了。
答案 5 :(得分: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>
我删除了:
<script src="http://code.jquery.com/jquery-2.1.3.min.js" type="text/javascript"></script>
警告消失了。
答案 6 :(得分:6)
我也遇到了这样一个问题,我不断得到一个无限循环,页面无限地重新加载。经过一些调试后,我发现错误是由于,无法加载带有特定id的模板,因为该文件中没有该模板。
小心你在角度应用中提供的网址。如果它不正确,角度最终可以继续寻找它,导致无限循环!
希望这有帮助!
答案 7 :(得分:5)
今天遇到这个问题并且发现我会发布如何修复它。就我而言,我有一个index.html页面:
<body ng-app="myApp" ng-controller="mainController"
<div ng-view></div>
</body>
在我的app.js文件中,我有以下代码:
$routeProvider.when('/', {
controller : 'mainController',
templateUrl : 'index.html',
title : 'Home'
}).when('/other', {
controller : 'otherController',
templateUrl : 'views/other.html',
title : 'other'
}).otherwise({
redirectTo : '/'
});
结果,当我进入页面(base_url /)时,它加载了index.html,并在ng-view内部再次加载了index.html,并在该视图中再次加载了index.html ..等等on - 创建index.html的无限递归加载(每次加载角度库)。
要解决所有我必须做的就是从routProvider中删除index.html - 如下所示:
$routeProvider.when('/other', {
controller : 'otherController',
templateUrl : 'views/other.html',
title : 'other'
}).otherwise({
redirectTo : '/'
});
答案 8 :(得分:2)
我有一个类似的问题,对我来说问题是由于控制器中缺少一些分号。应用程序的缩小可能导致代码执行不正确(很可能导致代码导致状态突变,导致视图呈现,然后控制器再次执行代码,依此递归)。
答案 9 :(得分:2)
我在代码笔上遇到了这个问题,结果却是因为我在Angular之前加载了JQuery。不知道是否可以申请其他案件。
答案 10 :(得分:1)
资本化也很重要!在我的指令中,我尝试指定:
templateUrl: 'Views/mytemplate'
并且不止一次地获得了#34;警告。当我将其更改为:
时,警告消失了templateUrl: 'views/mytemplate'
纠正我,但我认为这是因为我放置指令的页面是在&#34;观点&#34;而不是&#34;观点&#34;在路由配置功能中。
答案 11 :(得分:1)
这也发生在.NET和MVC 5上,过了一段时间我意识到在Index.cshtml文件的标签内:
<div data-ng-view=""></div>
再次包含在部分脚本中。要解决服务器端的问题,我所做的就是返回局部视图。类似的东西:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Login()
{
return PartialView();
}
public ActionResult About()
{
return PartialView();
}
}
答案 12 :(得分:1)
我遇到同样的问题,因为我在angular
中有index.html
两次:
<script src="https://handsontable.github.io/ngHandsontable/node_modules/angular/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
请注意,仅当html5
模式为true,当我的html5
模式为false时,才会出现警告,我没有看到此警告。
因此删除第一个angular.js
可以解决问题。
答案 13 :(得分:1)
我遇到了同样的问题(“尝试加载角度不止一次”),因为我在index.html中包含了两次angularJs文件(没有察觉)。
<script src="angular.js">
<script src="angular.min.js">
答案 14 :(得分:0)
在html中缺少结束标记时,我遇到了这个问题。
所以代替:
<table></table>
..我的HTML是
<table>...<table>
如上所述,尝试在有角度后加载jQuery。这样可以防止出现错误消息,但并不能真正解决问题。 jQuery'.find'之后并没有真正起作用。.
解决方案是修复丢失的结束标记。
答案 15 :(得分:0)
对我来说,问题是,我在同一文件夹中备份了控制器(js)文件并进行了一些其他更改,然后捆绑加载了这两个控制器文件(原始和备份js)。从捆绑的脚本文件夹中删除备份即可解决此问题。
答案 16 :(得分:0)
我的问题是以下一行(HAML):
%a{"href"=>"#", "ng-click" => "showConfirmDeleteModal()"} Delete
请注意,我有一个有角度的ng-click
并且我有一个href
标记,它会跳转到同一页面的#
。我只需删除href
标记,我就可以了。
答案 17 :(得分:0)
另一种情况是使用Webpack
,它将angular.js与angular.js相加,后者是从index.html <script>
标记加载的角度。
这是因为我们在许多文件中使用angular
显式导入:
define(['angular', ...], function(angular, ...){
所以,webpack决定捆绑它。将所有这些清理成:
define([...], function(...){
一次修复Tried to Load Angular More Than Once
。
答案 18 :(得分:0)
在我的情况下,我有index.html嵌入2个视图,即view1.html和view2.html。我开发了这两个独立于index.html的视图,然后尝试使用route来嵌入。 所以我在2个视图html文件中定义了所有脚本文件,这导致了这个警告。从视图中删除angularJS脚本文件后,警告消失了。
简而言之,脚本文件为angularJS,jQuery和angular-route.js 应仅包含在index.html中,而不包含在视图html文件中。
答案 19 :(得分:0)
对于将来遇到此问题的任何人,对我而言,它是由run
块中的箭头函数而不是函数文字引起的:
// bad
module('a').run(() => ...)
// good
module('a').run(function() {...})
答案 20 :(得分:0)
我遇到了完全相同的错误。几个小时后,我注意到我的.JSON文件中有一个额外的逗号,在最后一个键值对上。
//doesn't work
{
"key":"value",
"key":"value",
"key":"value",
}
然后我就把它取下来了(最后一次&#39;,&#39;)并解决了这个问题。
//works
{
"key":"value",
"key":"value",
"key":"value"
}
答案 21 :(得分:0)
你必须改变角度路线'/'!这是一个问题,因为'/'基本网址请求。如果您更改'/'=&gt; '/ home'或'/ hede'angle将会很好的工作。