AngularJs $ location.path,带有完整的URL

时间:2013-11-30 17:05:56

标签: angularjs

如果用户在模态中单击“确定”,我想将用户路由到网址。在我的控制器中,我收到了像

这样的网址
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")

例如

3 个答案:

答案 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()返回新路径。