Пытался загрузить Angular Больше, чем однажды
У меня есть приложение для висячего леса (генератор полных сталей angular).
grunt serve
работает отлично, но grunt build
создает дистрибутив, который блокирует память, скорее всего, из-за круговых ссылок в angular.
Я обновил angular до 1.2.15
. Ошибка, которую я получаю:
WARNING: Tried to Load Angular More Than Once
До обновления ошибка:
Error: 10 $digest() iterations reached. Aborting!
Это довольно сложно отлаживать, поскольку это происходит только после сборки/минимизации. Все мои модули находятся в формате массива angular, поэтому инициализация DI не должна быть проблемой, но она есть.
Нет ни одного script, который вызывает это. Единственный способ уйти - это не инициализировать файл 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');
Ответы
Ответ 1
Это может быть ряд проблем: по существу это проблема 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
загрузку angular (и всего остального) снова и снова.
В моем случае grunt-concat вызвал ошибку templateUrl после сборки, но не раньше.
Ответ 2
Я столкнулся с этой проблемой, когда забыл включить ".html" для представлений.
Пример:
templateUrl: 'views/home'
Должно быть:
templateUrl: 'views/home.html'
Ответ 3
Похоже, никто не упоминал об этом нигде, поэтому вот что вызвало это для меня:
У меня была директива ng-view на моем теле. Изменение этого типа
<body layout="column">
<div ng-view></div>
...
</body>
остановил ошибку.
Ответ 4
Это не имеет никакого отношения к app.js
вообще. Вместо этого это предупреждение регистрируется при включении библиотеки Angular JS более одного раза.
Мне удалось воспроизвести ошибку в этом JSBin. Обратите внимание на два тега script (две разные версии):
<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>
Соответствующий Angular код GitHub.
Ответ 5
У меня была такая же проблема. Проблема заключалась в конфликте между JQuery и Angular. Angular не смог установить полную библиотеку JQuery для себя. Поскольку JQLite в большинстве случаев достаточно, я включил Angular сначала на свою веб-страницу, а затем загрузил JQuery. Ошибка исчезла.
Ответ 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>
И предупреждение исчезло.
Ответ 7
Если бы сегодня эта проблема и подумал, я бы опубликовал, как я ее исправил. В моем случае у меня была страница 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(каждый раз при загрузке библиотек angular).
Чтобы решить все, что мне нужно было сделать, это удалить index.html из маршрутаProvider - следующим образом:
$routeProvider.when('/other', {
controller : 'otherController',
templateUrl : 'views/other.html',
title : 'other'
}).otherwise({
redirectTo : '/'
});
Ответ 8
Я также столкнулся с такой проблемой, когда я постоянно получал бесконечный цикл, и страница перезагружалась бесконечно. После некоторой отладки я обнаружил, что ошибка вызвана, потому что angular был не способен загрузить шаблон, заданный с определенным идентификатором, потому что шаблон не присутствовал в этом файле.
Будьте осторожны с URL-адресом, который вы предоставляете в приложениях angular. Если это не правильно, angular может просто продолжать искать его в конце концов, что приведет к бесконечному циклу!
Надеюсь, это поможет!
Ответ 9
У меня была аналогичная проблема, и для меня проблема была связана с некоторыми недостающими точками с запятой в контроллере. Минимизация приложения, вероятно, приводила к неправильному выполнению кода (скорее всего, полученный код вызывал мутации состояния, что заставляет визуализировать представление, а затем контроллер снова выполняет код и т.д. Рекурсивно).
Ответ 10
У меня была эта проблема с кодовым пером, и это оказалось просто потому, что я загружал JQuery до Angular. Не знаю, может ли это применяться для других случаев.
Ответ 11
Капитализация также важна! В моей директиве я попытался указать:
templateUrl: 'Views/mytemplate'
и получил предупреждение "более одного раза". Предупреждение исчезло, когда я изменил его на:
templateUrl: 'Views/mytemplate'
Исправьте меня, но я думаю, что это произошло потому, что страница, на которую я разместила директиву, находилась под "представлениями", а не "Просмотры" в функции конфигурации маршрута.
Ответ 12
Это случилось со мной и с .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();
}
}
Ответ 13
У меня была эта же проблема ( "Пытался загрузить Angular Больше, чем один раз" ), потому что я включил дважды файл angularJs (без восприятия) в свой index.html.
<script src="angular.js">
<script src="angular.min.js">
Ответ 14
Вы должны изменить angular route '/'! Это проблема, потому что запрос '/' базового url. Если вы измените '/' = > '/home' или '/hede' angular, то получится хорошая работа.
Ответ 15
У меня была такая же ошибка. Через несколько часов я заметил, что в моем файле .JSON была добавлена дополнительная запятая, в последней паре ключ-значение.
//doesn't work
{
"key":"value",
"key":"value",
"key":"value",
}
Затем я просто снял (последний), и это решило проблему.
//works
{
"key":"value",
"key":"value",
"key":"value"
}
Ответ 16
Для тех, кто имеет эту проблему в будущем, для меня это вызвано функцией стрелки вместо литерала функции в блоке run
:
// bad
module('a').run(() => ...)
// good
module('a').run(function() {...})
Ответ 17
В моем случае у меня есть index.html, который включает 2 вида i.e view1.html и view2.html. Я разработал эти 2 представления независимо от index.html, а затем попытался внедрить с использованием маршрута.
Таким образом, у меня были все файлы script, определенные в 2 файлах html view, которые вызывали это предупреждение. Предупреждение исчезло после удаления включения файлов angularJS script из представлений.
Короче говоря, файлы script angularJS, jQuery и angular -route.js должен быть включен только в index.html и не просматривать html файлы.
Ответ 18
Другим случаем является Webpack
, который выполняет concating angular в bundle.js, помимо angular, который загружается из тега index.html <script>
.
это произошло из-за того, что мы использовали явный импорт angular
во многие файлы:
define(['angular', ...], function(angular, ...){
так, webpack решил также расслоить его. очистка всех из них:
define([...], function(...){
фиксировало Tried to Load Angular More Than Once
за один раз и все.
Ответ 19
Моя проблема заключалась в следующей строке (HAML):
%a{"href"=>"#", "ng-click" => "showConfirmDeleteModal()"} Delete
Обратите внимание, что у меня есть angular ng-click
, и у меня есть тег href
, который будет переходить на #
, который является той же самой страницей. Мне просто пришлось удалить тег href
, и мне было хорошо идти.
Ответ 20
У меня такая же проблема, потому что у меня 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
является истинным, когда мой режим html5
был ложным, я не видел этого предупреждения.
Поэтому удаление первого angular.js
решает проблему.
Ответ 21
Проблема для меня заключалась в том, что я сделал резервную копию файла контроллера (js) с некоторыми другими изменениями в одной и той же папке и связал загруженные файлы контроллера (оригинал и резервное копирование js). Удаление резервной копии из папки сценариев, которая была в комплекте, решила проблему.