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

Angular перезагрузить текущий маршрут и перезагрузить текущий шаблон

Когда использование посещает приватную страницу, неавторизованную, скажем, профиль, мой бэкэнд 302 перенаправляет на действие контроллера, которое обслуживает логин, частичный вместо частичного профиля. Поскольку он 302 перенаправляет на действие, которое возвращает частичное, адресная строка URL не изменяется со страницы, к которой пользователь пытался получить доступ ( "/profile" ).

Я собирался "исправить" это, но на самом деле я думаю, что он создает хороший пользовательский интерфейс вместо того, чтобы обращаться с возвращаемыми URL-адресами в качестве параметров запроса.

Идея заключается в том, что когда они входят в систему, я просто хочу перезагрузить текущий маршрут aka сделать запрос GET для частичного профиля через "/profile" и переключить его обратно вместо частичного входа.

Однако я не могу заставить этот "перезагрузить текущий маршрут" работать. Я пробовал все из следующих действий:

$location.$$compose();
$location.absUrl($location.path());
$location.url($location.path());
$location.path($location.path())
$route.reload();

Но никто не работает. $route.reload() кажется определенным способом, но он также не работает. Он проходит цикл маршрутизации, восстанавливает контроллер, но не выполняет запрос GET для перезагрузки шаблона

Единственное, что работает, это жесткое обновление через location.reload(), но это не идеально.

Как заставить angular перезагрузить шаблон для текущего маршрута?

4b9b3361

Ответ 1

Хорошо, я нашел решение, предоставленное lgalfaso на Github (точная паста):

Шаблоны кэшируется, если у пользователя нет разрешений на страницу, тогда эта проверка должна быть выполнена до того, как она дойдет до контроллера или после, в контроллере, но не в поиске шаблона

Если вы хотите следовать, то вам нужно удалить шаблон из шаблона $templateCache перед вызовом reload

Итак, это сработало для меня, потому что шаблон входа в систему фактически кэшируется как шаблон, к которому пользователь пытается получить доступ. Таким образом, удаляя его и позволяя angular повторно выбрать правильный для текущего маршрута, работал как шарм.

var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$route.reload();

Ответ 2

Я заметил, что метод $route.reload() повторно создает все, что настроено на вашем шаблоне $routeProvider.when("/someUrl",{controller:'SomeController',templateUrl:'SomeView.html'}), контроллере и/или любом разрешенном promises, который вы, возможно, прошли в методе .when().

Поэтому; при создании вашего приложения, если вы хотите, чтобы $route.reload() перезагрузил всю страницу и повторно создал контроллеры, вы должны поместить все в свой контейнер <div ng-view></div> и включить любые меню или нижние колонтитулы внутри файла templateUrl.