0

我在一个编辑器上工作,客户端使用 AngularJS,服务器端使用 symfony 2(我认为使用 symfony 对我的问题来说是微不足道的)。

所以我的网址有两部分: - symfony 部分访问编辑器 - 角度部分导航到编辑器

当用户保存他的更改(通过 AJAX)时,我想更新 symfony 部分以添加生成的 id。所以我用这个 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));,Angular 会尝试将我重定向到我的 404 路由。

感谢帮助。

编辑

生成的路线是:

http://localhost/Claroline/web/app_dev.php/innova_path/workspace/2/path/editor/37#/global

编辑 2

如果可能的话,我宁愿不重新加载页面。

4

1 回答 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);
于 2013-10-16T14:06:22.800 回答