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