我尝试将用户重定向到AngularJS样式网址:
http://somedomain.com/#/oauth/authorize
我有一些参数我通过我的模型添加到URL。到目前为止,如此标准。直到Spring MVC在第400行的RedirectView
内进行了一次黑暗而险恶的转弯。如果你点击该链接,你会看到评论:
// Append anchor fragment, if any, to end of URL.
没有!这对AngularJS来说并不好!这将使我通常漂亮的重定向:
http://somedomain.com/#/oauth/authorize?query=params
看起来像:
http://somedomain.com/?query=params#/oauth/authorize
这是糟糕的juju!
所以我有两个问题:
感谢您的帮助!
答案 0 :(得分:0)
我觉得我这样做之后需要洗澡,但这是一个可能的解决方案。
在创建配置app.js
的模块之前,立即将其放入主脚本(即$routeProvider
)。
var urlLoaded = window.location.href;
var qIndex = urlLoaded.indexOf('?');
var hashIndex = urlLoaded.indexOf('#');
if (qIndex !== -1 && hashIndex !== -1 && qIndex < hashIndex) {
var correctedPath = urlLoaded.substring(hashIndex);
var correctedParams = urlLoaded.substring(qIndex, hashIndex);
var base = urlLoaded.substring(0, qIndex);
var correctedUrl = base + correctedPath + correctedParams;
window.location.href = correctedUrl;
}
答案 1 :(得分:0)
如果您处于早期阶段,我会考虑使用HTML5 pushState。通过这种方式,你可以像使用它们一样使用锚点,而你的网址看起来会更清晰。这方面存在浏览器限制以及其他注意事项,但正确使用它可能会节省您再次运行的时间。
您可以扩展此类,覆盖该方法,并将其修复为比当前更智能。将它注册为spring(可能需要几个覆盖,查看ViewControllerRegistry),如果感觉不错,请提交Pull Request并查看是否需要它。
以@hartz1989建议的方式将该网址重新提交回提交
您可以使用具有重定向网址的查询参数进行回复,而不是进行重定向,并添加处理角度的处理程序并理解“重定向”。我真的不喜欢这个想法,但这是另一个想法。