AngularJS:从控制器内读取路由参数
Posted
技术标签:
【中文标题】AngularJS:从控制器内读取路由参数【英文标题】:AngularJS: Read route param from within controller 【发布时间】:2013-04-22 05:16:34 【问题描述】:如何在 AngularJS 控制器中读取来自 URL 的参数?
假设我有一个类似 http://localhost/var/:value
的 URL,我希望将值存储在控制器内的变量中,用于 /var/:value
URL。
我曾尝试使用$routeParams.value
和$route.current.params.value
,但$routeParams
在开头未定义,$route
不起作用。
【问题讨论】:
“$routeParams 开头未定义且 $route 不起作用”是什么意思?你能分享你试图让它们工作的代码吗? $route.current 和 $routeParams 都应该在控制器提供程序中给出正确的结果,您已经设置了路由并将依赖项注入控制器。 【参考方案1】:问题是您可能在发生路由更改之前运行的控制器中注入$routeParams
或$route
,例如您的主/主/页面控制器。
如果您在控制器中为特定路由注入$routeParams
(在定义路由时由controller
属性指定),那么它将起作用,否则您可能会更好地监听路由的各种事件服务广播。
尝试更改您的代码以使用
$scope.$on('$routeChangeSuccess', function (ev, current, prev)
// ...
);
【讨论】:
你说得对,控制器在路由改变之前运行,因为客户端在连接时直接调用 URL。但是您发布的代码不起作用,因为没有路线更改。还有其他解决此问题的建议吗? 如果您的客户直接点击 url 而您没有让 AngularJS 处理路由,那么您将无法使用$routeParams
。 $routeParams
仅在您使用 $routeProvider.when(/movies/:genre, ... )
时才有效,否则您必须手动提取值。问题:您是在使用 AngularJS 路由还是只是在寻找一种从 url 中提取值的方法?
我正在使用 AngularJS 进行路由,因为我想在我的 ng-view
(angular-express-seed) 中加载不同的 templateUrls
。但是感谢您的回答,看来我需要用不同的方法解决我的问题。
有同样的问题,我试图引用 $route.current.controller 并且在填充实际 ng-view 路由之前,它在“主”页面上的控制器中未定义。谢谢你的解释!【参考方案2】:
要求:确保“ngRoute”在您的应用模块中
Route provider set up as: http://localhost/var/:valName
功能设置为:
function functionName($scope, $routeParams)$scope.value = $routeParams.valName;
html 视图:
value['valName']
【讨论】:
以上是关于AngularJS:从控制器内读取路由参数的主要内容,如果未能解决你的问题,请参考以下文章
react怎样实现路由,类比angularjs中的实现路由控制的方法?
angularjs学习笔记--$http数据渲染到表格路由依赖注入provider