【问题标题】:AngularJS $location.search() not workingAngularJS $location.search() 不工作
【发布时间】:2014-10-30 13:33:58
【问题描述】:

这是我第一次尝试在 AngularJS 中使用 $location 服务来检查查询字符串参数。我一直在阅读文档并尝试在 Plunkr 中使用它来了解如何使用它,但到目前为止我还没有让它从查询字符串中检索任何参数。

我一直在用这个 plunk http://plnkr.co/edit/RIFdWa5ay2gmRa6Zw4gm?p=info 测试它

var app = angular.module('myApp', [])
  .config(function($locationProvider) {
    $locationProvider.html5Mode(true); 
  });

angular.module('myApp').controller('myCtrl', function($scope, $location){
    $scope.name = "Andrei";
    $scope.url = $location.host();
    $scope.path = $location.path();
    $scope._params = $location.search();
  });

我已经读到需要在 $locationProvider 上设置 html5Mode(true) 才能使 $location 服务按“预期”工作 - 我已经这样做了,但是在我的 plunk 中设置它时没有任何效果(您可以将其设置为 false,您会看到绑定再次正常运行)。

我是否遗漏了有关 $location 服务的某些内容?

感谢任何帮助或建议!

谢谢!

【问题讨论】:

  • 您的 Plunker 不工作.. 对于 Angular 1.3,您需要在 HTML 中添加一个基本标签 .. 然后您的 plunker 位于没有查询参数的 iframe 中(如您所见路径与当前 URL 路径不同)我自己使用 $location.search() 来获取 url 参数,它可以工作。

标签: javascript angularjs


【解决方案1】:

在 AngularJS 1.3 中,$location 在 HTML5 模式下需要一个 <base> 标记,以便它知道所有链接的相对路径。您可以添加 <base href="/" /> 以使其再次运行。

http://plnkr.co/edit/j9rd1PajNLQVJ8r4c8BZ?p=preview

【讨论】:

  • 感谢您的评论!我错过了 AngularJS 文档的基础部分。实际上,一旦将其添加到 index.html 中,代码就会再次运行,但我仍然没有看到使用 search() getter 的查询字符串。在上述情况下 (url) search() getter 不应该返回 {"p": "info" } 吗?
  • 代码运行的 iframe 的 URL 实际上是"http://run.plnkr.co/b5QdYqBeapjRDHkk/",没有查询字符串。 “编辑”网址用于页面/plnkr 应用程序。
  • 在我的机器上做了一个独立的测试,让它按照我想要的方式工作。非常感谢您的帮助!
  • @monstro 它对我来说仍然可以正常工作。请注意,旧版本的 IE 不支持 HTML5 模式,因此无法正常工作。
猜你喜欢
  • 2016-05-08
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多