如果用户在模态中单击“确定”,我想将用户路由到网址。在我的控制器中,我收到了像
这样的网址var newUrl = http://localhost:3000/#/dashboard
var newUrl = http://localhost:3000/#/users
作为变量。
如果我然后使用
$location.path(newUrl);
它不起作用。我也试过
$location.url(newUrl);
但我的网址编码如此。
http://localhost:3000/#/#%2Fdashboard
有没有办法只获取网址的路径?
修改
此代码是服务的一部分。用户在表单中进行一些输入并单击另一个链接,例如在菜单中。然后会出现一个弹出窗口,要求他跳过表单更改。如果他点击是,我会收到请求的网址。这是从我在服务器上的开发环境当然会是另一个url。所以我不能只使用
$location.path("/users")
例如
答案 0 :(得分:21)
在使用Angular preventDefault $ locationChangeStart事件时,我遇到了同样的问题,强行保存,只在成功时重定向。我在控制器的主体中定义了以下函数:
var baseLen = $location.absUrl().length - $location.url().length;
function getPath(fullUrl) {
return fullUrl.substring(baseLen);
}
它似乎不是一个干净的解决方案,但作为一种解决方案,它可以完成这项工作。如果您不知道您的网址指向同一网站,那么RegEx可能会更适合您。
答案 1 :(得分:10)
您可以使用$location.absUrl()
。
请参阅官方文档:enter link description here
此方法仅限吸气剂。
返回完整网址表示,其中所有网段均按照RFC 3986中指定的规则进行编码。
答案 2 :(得分:5)
我可以提供不同的解决方案:
$scope.$on('$locationChangeStart', function(e) {
if (meetsTheRequirementsToLeave()) {
return;
}
var newPath = $location.path();
e.preventDefault();
checkIfUserWantsToLeave().then(function() {
$location.path(newPath);
});
});
在此事件中$location.path()
返回新路径。