Не удалось обновить текущий маршрут AngularJS

0

Я работаю над редактором, который использует 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

Если это возможно, я бы предпочел не перезагружать страницу.

  • 0
    Я думаю, вам нужно будет привести более конкретный пример. Можете ли вы сказать мне, что ваша переменная newRoute распечатывает, когда вы делаете на нем console.log? Я подозреваю, что вы делаете это намного сложнее, чем нужно, и что вы действительно просто хотите использовать $location.path() но я не могу сказать это наверняка без дополнительной информации.
  • 0
    Я отредактировал свой пост, чтобы добавить сгенерированный маршрут. Если я использую $location.path() , у меня есть доступ только к угловой части ( /global ). Но я должен обновить первую часть URL (до # ).

1 ответ

1
Лучший ответ

Если вы хотите перейти на другую страницу или выполнить полную перезагрузку страницы, $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);
  • 0
    Спасибо за помощь. Но если я могу, я бы не стал перезагружать страницу. Я забыл поставить это в своем вопросе.
  • 0
    @Corum Я обновил свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню