更新AngularJS当前路由失败

时间:2013-10-16 13:24:50

标签: javascript angularjs symfony

我在一个编辑器上工作,它使用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));

当我在控制台中打印生成的路径时,它是正确的,当我在浏览器中复制/粘贴它时,页面已正确加载。

但如果我使用$location.url($location.hash(newRoute));设置网址,Angular会尝试将我重定向到我的404路线。

感谢您的帮助。

修改

生成的路线是:

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

编辑2

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

1 个答案:

答案 0 :(得分:1)

如果您要导航到其他页面或进行整页重新加载,$location将无法执行您想要的操作,则需要回退到window.location

更改

$location.url($location.hash(newRoute));

location = newRoute;

更新

如果您定位的是现代浏览器,则可以使用html5历史记录api中的pushState()来避免重新加载页面。

更改

$location.url($location.hash(newRoute));

$timeout(function() {
    history.pushState(null, null, newRoute);
}, 0);