如何配置AngularJS路由

时间:2015-08-06 14:28:11

标签: angularjs

我需要将id从project / id传递给CommentCtrl,当我尝试console.log($routeParams.id)它返回undefined时...任何人都可以找到我的代码有什么问题?

   .config(function($routeProvider) {
                    $routeProvider.
                            when('/project/:id', {
                                controller: 'CommentsCtrl'
                            }).
                            otherwise({
                                redirectTo: '/'
                            });
                })
              .controller('CommentsCtrl',function($scope,$http,$routeParams){
                  $scope.comments = [];
                  $scope.param = $routeParams.id;
              });

更新

在html中,我只是在CommentsCtrl内有<div ng-view></div>CommentsCtrl这样的模块:

<div ng-controller="CommentsCtrl">
  <div ng-view></div>
</div>

1 个答案:

答案 0 :(得分:1)

我已将我的评论写入答案以获得更好的解释。

您必须将html结构调整为:

<div>
  <div ng-view></div>
</div>

删除ng-controller,因为ngRoute会分配控制器,如配置中所示:

[...]
  $routeProvider.
    when('/project/:id', {
        controller: 'CommentsCtrl'
    })

然后,CommentsCtrl会将$ routeParams.id作为参数。

如果您需要一个包装控制器,您必须定义一个不同的包装控制器,例如&#39; AppCtrl&#39;或者其他的东西。但它必须与ngRoute使用的控制器不匹配。

这是我可以为如何使用ngRoute组装的最简单的例子: http://plnkr.co/edit/JSwafRF2AavvlWtsnjus?p=preview

您可以通过修改网址在全屏视图中对其进行测试。到目前为止,我无法在plnkr上运行链接

更新

考虑到我的示例代码,还有一些事情需要提及:

  • 使用plunker,我必须使用哈希(#),因为服务器不允许html5样式链接。对于您的应用,这可能会有所不同,因此您可能会遗漏哈希值。

  • 为简单起见,我已删除路线配置中的项目路径

如果这根本没有帮助,那么如果您提供应用的实时视图可能会有所帮助,因此我可以明确核实什么不起作用或哪些不对。