Подтвердить что ты не робот

Angular JS-маршрут, вызывающий бесконечный цикл

Я пытаюсь понять, почему страница не перемещается по шаблону при нажатии. Обновление URL-адресов, и у меня нет ошибок JS. Я считаю, что он загружает файл, но затем он бесконечно загружает контроллер. Я нашел это после того, как положил console.log('test!') в экземпляр SessionController.

Макет

<div ng-view></div>

Мой просмотр

<a href="/testing"> My link of seriousness </a>

Мой JS

window.MainController = function($scope, $route, $routeParams, $location) {
  $scope.$route = $route;
  $scope.$location = $location;
  $scope.$routeParams = $routeParams;
  console.log($route);
  console.log($location);
  console.log($routeParams);
};

MainController.$inject = ["$scope", "$route"];

window.app = angular.module('web_client', [], function($routeProvider, $locationProvider) {
  return $routeProvider.when('/testing', {
    templateUrl: '/partials/other_stuff/index.html',
    controller: 'MyController'
  });
});


window.MyController = function($scope, $http) {
  console.log('Infinite Loop!');
};

И в partials/sessions/new.html у меня большой и яркий:

FOOBAR!
4b9b3361

Ответ 1

Единственное, что я вижу, - это отсутствие скобок и отсутствующая запятая. Вы можете попробовать:

$routeProvider
  .when("/login", {
    templateUrl: "sessions/new.html",
    controller: SessionsController
  })
  .otherwise({
    redirectTo: "/"
  });

Ответ 2

У меня была такая же проблема и раньше, и я думаю, что основной причиной является использование <ng-view>, который, по-видимому, был использован и в этом случае. Маршрут уже загружает URL-адрес шаблона, поэтому я считаю, что использование директивы ng-view приводит к тому, что шаблон загружается рекурсивно, вызывая бесконечный цикл.

Попробуйте удалить ng-view и вместо этого разместите всю разметку вида непосредственно в шаблоне .html, указанном в шаблоне url маршрута. В качестве альтернативы, если это общий шаблон, попробуйте вместо этого использовать ng-include (например, <div ng-include src="'/path/to/template.html'"></div> Не забудьте одинарные кавычки вокруг вашего пути, чтобы идентифицировать его как строку, а не ссылку на переменную сферы!).

Ответ 3

Проблема с теми же симптомами

Недавно я решил аналогичную проблему в одном из моих проектов. Я добавил console.log( "Video Page Controller Loaded" ) в контроллер, который я отлаживал. Аналогично, он записывал этот текст, пока я не закрою вкладку.

Мое решение:

Мне было присвоено неправильное имя для файла шаблона.

when('/videos', {
  templateUrl: 'templates/video-list.tpl.html',
  controller: 'VideoListCtrl'
})

Когда я должен был:

when('/videos', {
  templateUrl: 'templates/video-list.html',
  controller: 'VideoListCtrl'
})

Ответ 4

Была такая же проблема "бесконечной перезагрузки", и Алекс Джонсон заставил меня подумать. Действительно, если путь шаблонаURL пуст (это мой случай) или неправильный путь, произойдет бесконечная перезагрузка ресурсов. Для меня решение было простым: я заменил templateURL: '' на template: ''.

Ответ 5

У меня была такая же проблема, и в конечном итоге я понял, что на самом деле я не создал частичный html файл, который я ему рассказывал для загрузки в моем app.config - если он не может найти файл шаблона, Angular, похоже, входит в бесконечный цикл функции контроллера.

Ответ 6

  • Проверьте правильность пути частичного просмотра (проверьте, получаете ли вы код HTTP 302 для частичного просмотра. Вы можете использовать morgan с Node + Express для печати HTTP-кода для каждого запроса)

    1. Если путь правильный, вы все равно можете получить бесконечный цикл, поскольку кеширование браузера статичных данных. Вы можете отключить кеширование в хроме. Для этого:
      • Открыть консоль разработчика
      • Нажмите кнопку настройки в консоли разработчика.
      • Отметьте опцию "Отключить кеш (в то время как DevTools открыт)"
      • Перезагрузите сервер и обновите страницу с помощью консоли разработчика в открытом состоянии.

Для меня проблема решена после решения проблемы пути и отключения кэширования

Ответ 7

Получена аналогичная проблема с приложением Rack. Решение было:

use Rack::Static, urls: ["/js", "/css", "/templates"]

Ответ 8

Моя проблема связана с указанием templateUrl без начального "/" не только на моем маршрутизаторе, но и на моих директивах!

Ответ 9

Моя проблема была связана с неправильным URL-адресом шаблона, а затем начал запускать маршрут, соответствующий шаблону URL. Проверьте правильность пути templateUrl.