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:从控制器内读取路由参数的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 基于路由动态加载控制器和模板

react怎样实现路由,类比angularjs中的实现路由控制的方法?

Angularjs动态路由模板Url变化

angularjs学习笔记--$http数据渲染到表格路由依赖注入provider

SignalR 客户端在 AngularJs 控制器中不起作用

AngularJS之基础-4 DI(控制器参数监听)指令(模板包含节点控制)事件绑定