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

Pip*_*tus 30 javascript service location angularjs

我在应用程序中使用角度,基本上是一个包含搜索结果的表格.可以通过类似URL来访问此表http://myapp/?client=clientName

除了其他之外,还为表格实例化角度控制器,用于打开具有行细节的模态对话框(也是基于角度的,具有bootstrap-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
};
Run Code Online (Sandbox Code Playgroud)

目标是知道表是否已将此特定client参数设置为过滤器.

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

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

我使用默认值(即不通过.config()调用配置它)在我的服务中注入$ location服务.而且,正如医生所说:

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

我错过了什么吗?此时不应该解析URL吗?

谢谢!


更新:我设法让它工作.问题是我没有配置所有服务.我之所以这样做,是因为我认为以这种方式它会采取默认值,但似乎这不是它的工作方式.

Ril*_*ark 43

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

appModule.config(['$locationProvider', function($locationProvider) {
        $locationProvider.html5Mode(true);
    }]);
Run Code Online (Sandbox Code Playgroud)

  • 用这种方式如果浏览器不支持html5模式,angular将回退到hashbang url,顺便说一下,有人知道如何在没有html5模式和路由器角度的情况下获取查询参数? (3认同)

Pun*_*roi 12

如果您不想指定基本标记,则可以指定require base false.

myapp.config(function($locationProvider) {
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: false
    });
});
Run Code Online (Sandbox Code Playgroud)


Ang*_*Gao 5

当我遇到这个问题时,除了设置配置之外,另一件对我有用的事情就是在查询字符串前添加"#".

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

myapp/#?client=clientName

允许$​​ location.search()给我一个非空对象,然后您可以使用它来访问每个参数 $location.search()['client']