我在一个编辑器上工作,它使用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
如果有可能,我宁愿不重新加载页面。
答案 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);