3

如果我有一个始终作为查询字符串传递的特定路由参数,那么使用 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.

4

2 回答 2

5

如果您的路线属于以下类型:

when('page/:id')

然后使用 $location search 不会在搜索结果中为您提供 ID。但是 $routesParams 可以。

但在查询参数的情况下,例如:

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

在这种情况下,您可以选择 $location.search 或 $routeParams 中的任何一个。

于 2015-01-19T06:31:03.947 回答
1

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

解释一下:我的网站有一种模式,仅供 kiosk 平板电脑使用,而正常用例是客户使用自己的设备。为了区分,我通过访问https://mysite.url/?kiosk来启动 kiosk 平板电脑,这会触发此操作(在加载时运行):

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

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

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

缓解了这个问题。

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

于 2016-09-15T23:05:55.143 回答