获取URL查询字符串与$ routeParams与$ location。$$搜索之间的区别

时间:2014-11-07 18:01:06

标签: angularjs ngroute

如果我有一个特定的路由参数总是作为查询字符串传递,那么使用angular' $routeParams服务检索参数并使用它是否有区别$location.$$search服务?如果是这样,那么另一个更好吗?


网址://localhost:80/app/profile?id=42

$routeParams方法:

app.controller('ProfileController', ['$routeParams', function($routeParams) {
  console.log($routeParams.id);
}]);


$location方法:

app.controller('ProfileController', ['$location', function($location) {
  console.log($location.$$search.id);
}]);


我已经在控制器中注入$location作为依赖项,需要执行问题中详述的行为。此外,控制器的模块还没有依赖ngRoute

2 个答案:

答案 0 :(得分:5)

如果您的路线类型为:

when('page/:id')

然后使用$ location搜索不会在搜索结果中显示ID。但$ routesParams确实如此。

但是对于查询参数ex:

when('page?key=value&key2=value2')

在这种情况下,您可以选择$ location.search或$ routeParams。

答案 1 :(得分:1)

似乎$ location方式在某种意义上更快(这是很自然的,因为$ routeParams使用$ location来获取其值)。

解释: 我的网站的模式仅适用于自助服务终端平板电脑,而正常使用情况是客户使用自己的设备。为了区分,我通过转到https://mysite.url/?kiosk来启动自助服务终端平板电脑,触发此功能(在负载下运行):

if($routeParams.kiosk){
    $cookieStore.put("kiosk", true);
}

现在,这往往会失败,因为$ routeParams没有时间初始化接近加载。切换到

if($location.search().kiosk){
    $cookieStore.put("kiosk", true);
}

缓解了这个问题。

(我的网站目前停留在Angular 1.2.19上,并没有考虑到所有当前最佳实践的人员。我的例子可能与有能力的开发人员编码的现代项目有关;-))