AngularJS:如何在控制器中读取路由参数

12

如何在AngularJS控制器中读取URL参数?

假设我有一个像http://localhost/var/:value的URL,我想要将其中的参数值存储在/var/:value URL对应的控制器变量中。

我尝试使用$routeParams.value$route.current.params.value,但是$routeParams在开始时是未被定义的,而且$route也无法正常工作。


“$routeParams在开始时未定义,$route无法工作”是什么意思?你能分享一下你尝试让它们工作的代码吗?在你设置路由并将依赖项注入控制器的控制器提供程序中,$route.current和$routeParams都应该给出正确的结果。 - pkozlowski.opensource
2个回答

15

问题在于您可能会将$routeParams$route注入到在路由更改之前运行的控制器中,例如您的主控制器或页面控制器。

如果您在特定路由的控制器中注入$routeParams(在定义路由时指定controller属性),则它将起作用,否则最好监听路由服务广播的各种事件。

尝试更改您的代码以使用:

$scope.$on('$routeChangeSuccess', function (ev, current, prev) {
   // ... 
});

1
你说得完全正确,控制器在路由改变之前运行,因为客户端在连接时直接调用URL。 但是你发布的代码不起作用,因为没有路由改变。还有其他解决这个问题的建议吗? - ctitze
3
如果你的客户端直接访问URL而不是让AngularJS处理路由,那么您将无法使用$routeParams$routeParams仅在使用$routeProvider.when(/movies/:genre, {...})时才起作用,否则您必须手动提取值。问题:您是否正在使用AngularJS路由,还是只是寻找从URL中提取值的方法? - Martin
жҲ‘жӯЈеңЁдҪҝз”ЁAngularJSиҝӣиЎҢи·Ҝз”ұпјҢеӣ дёәжҲ‘жғіеңЁжҲ‘зҡ„ng-viewдёӯеҠ иҪҪдёҚеҗҢзҡ„templateUrlsпјҲangular-express-seedпјүгҖӮдҪҶжҳҜж„ҹи°ўжӮЁзҡ„зӯ”жЎҲпјҢдјјд№ҺжҲ‘йңҖиҰҒз”ЁдёҚеҗҢзҡ„ж–№жі•и§ЈеҶіжҲ‘зҡ„й—®йўҳгҖӮ - ctitze
遇到了同样的问题,我试图引用$route.current.controller,但在实际的ng-view路由填充之前,在“主”页面上的控制器中它是未定义的。感谢您的解释! - James Eby

3

需求:确保在您的应用程序模块中包含'ngRoute'

Route provider set up as: http://localhost/var/:valName

函数设置如下:

function functionName($scope, $routeParams){$scope.value = $routeParams.valName;}

HTML视图:

{{value['valName']}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接