如果我有一个特定的路由参数总是作为查询字符串传递,那么使用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
。
答案 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上,并没有考虑到所有当前最佳实践的人员。我的例子可能与有能力的开发人员编码的现代项目有关;-))