Javascript Angularjs$位置服务显然没有解析url?

Javascript Angularjs$位置服务显然没有解析url?,javascript,service,angularjs,location,Javascript,Service,Angularjs,Location,我在一个应用程序中使用angular,它基本上是一个带有搜索结果的表。 可以通过类似url的url访问此表http://myapp/?client=clientName 为表实例化一个角度控制器,除其他外,用于打开一个带有行详细信息的模式对话框(也基于角度,带有引导ui) 这些行详细信息通过一个服务提供,该服务对两个控制器都有一些共同的功能:一个用于表,另一个用于模式 现在,在此服务中,我要检索以下代码段: service.fetchRelatedElements = function(elem

我在一个应用程序中使用angular,它基本上是一个带有搜索结果的表。 可以通过类似
url的url访问此表http://myapp/?client=clientName

为表实例化一个角度控制器,除其他外,用于打开一个带有行详细信息的模式对话框(也基于角度,带有引导ui)

这些行详细信息通过一个服务提供,该服务对两个控制器都有一些共同的功能:一个用于表,另一个用于模式

现在,在此服务中,我要检索以下代码段:

service.fetchRelatedElements = function(element, cb) {
  var url = '/search.json?results=20&type='+element.type;
  if ($location.search()['client']) {
    url += '&client=' + $location.search('client');
  }
  return doFetch(url, cb); // actual server json GET
};
目标是了解表是否已将此特定的
客户机
参数设置为筛选器

如果我在这个调用的开头放置一个断点,我会看到
$location.absUrl()
返回当前的浏览器URL(在我的例子中,它有我感兴趣的
客户机
参数)

但是
$location.search()
返回一个空对象

我正在我的服务中注入带有默认值的$location服务(即,不通过
.config()
调用配置它)。 正如博士所说:

$location服务解析浏览器地址栏中的URL(基于 ,并使您的用户可以使用URL 应用程序

我错过什么了吗?在这一点上,URL不应该被解析吗

谢谢



更新:我已经设法让它工作了。问题恰恰是我根本没有配置服务。我这样做是因为我假设这样做会使用默认值,但它似乎不是这样工作的。

用于$location.search的API非常混乱。召唤

$location.search('client');
将搜索对象设置为{client:true}并返回$location。此外,您有一个打字错误
客户端
,而不是
客户端
,因此它将搜索设置为空对象。所以你可能想要:

url += '&client=' + $location.search()['client'];

在我的应用程序的模块配置中配置
$locationProvider
之前,我也遇到了同样的问题:

appModule.config(['$locationProvider', function($locationProvider) {
        $locationProvider.html5Mode(true);
    }]);

您可以编写一个函数,根据此注释解析$window.location.search


当我遇到这个问题时,除了设置配置之外,另一个对我有效的方法是在查询字符串前面添加“#”

因此,如果您是创建查询字符串的人,则更改
myapp/?client=clientName


myapp/#?客户端=clientName


allowed$location.search()为我提供一个非空对象,然后您可以使用
$location.search()['client']

访问每个参数。如果您不想指定基标记,可以指定require base false

myapp.config(function($locationProvider) {
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: false
    });
});

能否共享$location.absUrl()的输出?这闻起来像是一个regexp问题。当然!它是
http://localhost:3000/results?utf8=%E2%9C%93&client=mond&type=&submittedLowerBound=&submittedUpperBound=&commit=Filter
。这是后端的rails应用程序。你能分享一些解决方案的代码吗?我遇到了相同的问题,$location.search()返回{}谢谢,Jmr,我修正了输入错误。但重要的是,在这一点上,
$location.search()
只返回
{}
。对不起,我没有注意到您在问题的开头放了断点,我想可能是$location.search(客户端)正在覆盖它。在这种情况下,我不确定发生了什么,$location.search()可以在我的机器上很好地解析您的URL。这样,如果浏览器不支持html5模式,angular将返回hashbang URL,顺便说一句,有人知道如何在没有html5模式和angular中的路由器的情况下获取查询参数?请注意,当您将其设置为html5模式时,html文件中还必须有一个基本标记。另外请注意,您可能需要添加
$locationProvider.hashPrefix(“”)谢谢。此评论应在官方文件中。:)
myapp.config(function($locationProvider) {
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: false
    });
});