Проблемы:
Я пытаюсь загрузить приложение Угловое JS в загрузочной области модальной, и отображается странное поведение на Internet Explorer (мы тестировали его на IE9 и 8).
мы обнаружили, что мы получали следующие ошибки: неопределенные ** объект Errorundefined
SCRIPT5022: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [["fn: function $locationWatch() {
var oldUrl = $browser.url();
var currentReplace = $location.$$replace;
if (!changeCounter || oldUrl != $location.absUrl()) {
changeCounter++;
$rootScope.$evalAsync(function() {
if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented) {
$location.$$parse(oldUrl);
} else {
$browser.url($location.absUrl(), currentReplace);
afterLocationChange(oldUrl);
}
});
}
$location.$$replace = false;
return changeCounter;
}; newVal: 7; oldVal: 6"],["fn: function $locationWatch() {
var oldUrl = $browser.url();
var currentReplace = $location.$$replace;
if (!changeCounter || oldUrl != $location.absUrl()) {
changeCounter++;
$rootScope.$evalAsync(function() {
if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented) {
$location.$$parse(oldUrl);
} else {
$browser.url($location.absUrl(), currentReplace);
afterLocationChange(oldUrl);
}
});
}
$location.$$replace = false;
return changeCounter;
}; newVal: 8; oldVal: 7"],["fn: function $locationWatch() {
var oldUrl = $browser.url();
var currentReplace = $location.$$replace;
if (!changeCounter || oldUrl != $location.absUrl()) {
changeCounter++;
$rootScope.$evalAsync(function() {
if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented) {
$location.$$parse(oldUrl);
} else {
$browser.url($location.absUrl(), currentReplace);
afterLocationChange(oldUrl);
}
});
}
$location.$$replace = false;
return changeCounter;
}; newVal: 9; oldVal: 8"],["fn: function $locationWatch() {
var oldUrl = $browser.url();
var currentReplace = $location.$$replace;
if (!changeCounter || oldUrl != $location.absUrl()) {
changeCounter++;
$rootScope.$evalAsync(function() {
if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented) {
$location.$$parse(oldUrl);
} else {
$browser.url($location.absUrl(), currentReplace);
afterLocationChange(oldUrl);
}
});
}
$location.$$replace = false;
return changeCounter;
}; newVal: 10; oldVal: 9"],["fn: function $locationWatch() {
var oldUrl = $browser.url();
var currentReplace = $location.$$replace;
if (!changeCounter || oldUrl != $location.absUrl()) {
changeCounter++;
$rootScope.$evalAsync(function() {
if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented) {
$location.$$parse(oldUrl);
} else {
$browser.url($location.absUrl(), currentReplace);
afterLocationChange(oldUrl);
}
});
}
$location.$$replace = false;
return changeCounter;
}; newVal: 11; oldVal: 10"]]
и многие другие ошибки
** 'JSON'
Итак, мы обнаружили, что есть 3 на IE: 1) JSON не был доступен 2) Проблема с приложением Bootstraping 3) Просмотр проблемы рендеринга
после прохождения через Угловое JS документации и множеством нитей из StackOverflow, таких как:
- JSON Parse Error on Internet Explorer
- Running AngularJS App on Internet Explorer 7
- http://docs.angularjs.org/guide/directive
Мы обнаружили, что есть несколько общих для всех потоков (также упомянутых в AngulaJS IE руководства): * Включать JSON2/JSON3 pollyfills для IE * использовать IE-заточку, и заранее объявить пользовательские теги (мы используем пользовательские машинописная директива, с ограничением: «E», заменить: правда) * использовать другие IE конкретные инструкции
Итак, я сделал следующую chagnes:
var markup = '<div id="ng-app" class="ng-app:myapp" ng-app="myapp" xmlns:ng="http://angularjs.org"><div ng-controller="MyAppAppCtrl"><div ng-view></div></div></div>';
jQuery('#works-modal').html(markup);
angular.bootstrap(jQuery('#ng-app'), ['myapp']);
jQuery('#works-modal').modal('show');
После реализации вышеуказанных изменений, я все еще получаю:
Error: 10 $digest() iterations reached. Aborting!
https://github.com/angular/angular.js/issues/1417
При попытке вынести вид, и приложение было перенаправление на главную страницу. поэтому я попытался внести изменения, предложенные в:
https://github.com/RobbinHabermehl/angular.js/commit/c801f91a25b9be6f5b1163c012e63c84cc6a1359
Теперь я больше не получаю ошибку, когда я нажимаю на ссылку, чтобы отобразить диалоговое окно модальным, он отображает всплывающие на секунду, затем переадресовывает на главную страницу.
Если я устанавливаю:
$locationProvider.html5Mode(false)
.hashPrefix('!');
Он отлично работает. Кто-нибудь сталкивается с подобной проблемой? Любая помощь приветствуется.
Update Я также сообщил, этот вопрос в списке ошибок Угловой JS Github, они сообщили мне, что они зафиксировали этот вопрос в версии 1.2:
https://github.com/angular/angular.js/issues/3397
Я буду проверять и обновлять этот поток, если это решает мою проблему.
Update
Я обновил мою версию Угловое, и это, кажется, решить эту "10 $ дайджеста() итераций достигнуто. Aborting!", однако, по-прежнему, как представляется, вызывая изменение URL, что приводит к перенаправлению на домашнюю страницу.
Позвольте мне объяснить мой сценарий здесь, так что другие могут предложить мне, если это точно связано с этим или нет:
У меня есть страница сказать: http://example.com/users/myCollection.html На этой странице, я загрузке мое приложение AngularJS внутри диалогового окна Bootstrap Modal, когда пользователь нажимает на какую-либо ссылку на странице. Угловой путь приложения, загруженное в модальном: /MyWork/найти
После повысит версию Угловых, теперь, режимный, кажется, загрузку приложения на секунду, а затем, перенаправление происходит, и он идет на главную страницу.
FYI, я также использую jQuery на странице, которая используется для запуска приложения Angular, есть ли вероятность конфликта из-за этого?
Спасибо, Равиш
«JSON не определен» означает, что в IE8 +, что страница работает в режиме совместимости. В стандартном режиме доступен доступ к глобальному «JSON». Проблемы с рендерингом и другие вещи также могут быть вызваны неправильным режимом рендеринга. – Tomalak
ну, я дошел до проблемы с JSON undefined. из-за некоторых причин совместимости мы используем «EmulateIE7» – Ravish
Я использую 'Hogan Engine', если это помогает. Я установил 'html5mode (false)' и, и добавил некоторый * console.log *, чтобы увидеть, был ли мой контроллер фактически вызван несколько раз, ну, он был вызван дважды, но просмотр был визуализирован, когда 'html5mode (false)' – Ravish