Я работаю над редактором, который использует AngularJS для клиентской стороны и symfony 2 для серверной части (я думаю, что использование symfony тривиально для моей проблемы).
Поэтому мой url имеет две части: - часть symfony для доступа к редактору - угловая часть для перехода в редактор
Когда пользователь сохраняет свои изменения (через AJAX), я хочу обновить часть symfony, чтобы добавить сгенерированный идентификатор. Поэтому я вручную создаю новый маршрут с помощью этого фрагмента кода js:
var newRoute = $location.protocol() + '://' + $location.host();
// Get symfony route (using FOSJSRouting)
newRoute += Routing.generate('innova_path_editor', {workspaceId: EditorApp.workspaceId, pathId: EditorApp.pathId});
// Add angular part
newRoute += '#' + $location.path();
$location.url($location.hash(newRoute));
Когда я печатаю сгенерированный маршрут в консоли, он исправляется, и когда я копирую/вставляю его в свой браузер, страница правильно загружается.
Но если я устанавливаю url с $location.url($location.hash(newRoute));
, Угловая попытка перенаправить меня на мой маршрут 404.
Спасибо за помощь.
РЕДАКТИРОВАТЬ
Сгенерированный маршрут:
http://localhost/Claroline/web/app_dev.php/innova_path/workspace/2/path/editor/37#/global
EDIT 2
Если это возможно, я бы предпочел не перезагружать страницу.
Если вы хотите перейти на другую страницу или выполнить полную перезагрузку страницы, $location
не будет делать то, что вы хотите, вам нужно вернуться к window.location
.
+ Изменить
$location.url($location.hash(newRoute));
в
location = newRoute;
Если вы ориентируетесь на современные браузеры, вы можете использовать pushState()
из html5 history api, чтобы избежать перезагрузки страницы.
+ Изменить
$location.url($location.hash(newRoute));
в
$timeout(function() {
history.pushState(null, null, newRoute);
}, 0);
newRoute
распечатывает, когда вы делаете на нем console.log? Я подозреваю, что вы делаете это намного сложнее, чем нужно, и что вы действительно просто хотите использовать$location.path()
но я не могу сказать это наверняка без дополнительной информации.$location.path()
, у меня есть доступ только к угловой части (/global
). Но я должен обновить первую часть URL (до#
).