【问题标题】:AngularJS: Read route param from within controllerAngularJS:从控制器内读取路由参数
【发布时间】: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 都应该在控制器提供程序中给出正确的结果,您已经设置了路由并将依赖项注入控制器。

标签: variables angularjs controller routes url-parameters


【解决方案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']}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多