【问题标题】:AngularJs $location.path with full urlAngularJs $location.path 与完整的 url
【发布时间】:2016-04-17 04:52:40
【问题描述】:

如果用户在模式中单击“确定”,我想将用户路由到一个 url。在我的控制器中,我收到像

这样的网址
var newUrl = http://localhost:3000/#/dashboard

var newUrl = http://localhost:3000/#/users

作为变量。

如果我那么使用

$location.path(newUrl);

它不起作用。我也试过了

$location.url(newUrl);

但我的网址是这样编码的。

http://localhost:3000/#/#%2Fdashboard

有没有办法只获取url的路径?

编辑

此代码是服务的一部分。用户在表单中进行一些输入并单击另一个链接,例如在菜单中。然后出现一个弹出窗口,要求他跳过表单更改。如果他点击是,我会得到请求的网址。这是来自我在服务器上的开发环境,当然它将是另一个 url。所以我不能只使用

$location.path("/users")

例如

【问题讨论】:

标签: angularjs


【解决方案1】:

我在 Angular preventDefault $locationChangeStart 事件时遇到了同样的问题,强制保存,并且仅在成功时重定向。我在控制器的主体中定义了以下函数:

var baseLen = $location.absUrl().length - $location.url().length;
function getPath(fullUrl) { 
    return fullUrl.substring(baseLen);
}

这似乎不是一个干净的解决方案,但作为一种变通方法,它可以完成工作。如果您不知道您的 URL 指向同一个站点,RegEx 可能更适合您。

【讨论】:

    【解决方案2】:

    您可以使用$location.absUrl()。

    查看官方文档:enter link description here

    这个方法只是getter。

    返回完整的 url 表示,所有段都根据 RFC 3986 中指定的规则进行编码。

    【讨论】:

    • 如你所说,absUrl 是getter 而不是setter,那么这如何回答这个问题呢?!
    【解决方案3】:

    我可以提供一个不同的解决方案吗:

        $scope.$on('$locationChangeStart', function(e) {
          if (meetsTheRequirementsToLeave()) {
            return;
          }
          var newPath = $location.path();
          e.preventDefault();
          checkIfUserWantsToLeave().then(function() {
            $location.path(newPath);
          });
        });
    

    在此事件中$location.path() 返回新路径。

    【讨论】:

    • 这是迄今为止最干净的解决方案 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多