我不需要使用ngView,但是我需要知道控制器中的路由参数。因此,我试图在控制器中注入$routeParams。但是,在我在HTML中声明ngView的情况下,此方法不起作用。那么,为什么配置$routeProvider需要在HTML中声明一个ngView(实际上我的要求并不需要)?

代码示例:
角度应用

var routeParamsApp = angular.module('routeParamsApp', ['ngRoute']);


配置文件

routeParamsApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {controller: 'routeParamsCntrl'}).
    when('/a', {controller: 'routeParamsCntrl'}).
    when('/a/:b', {controller: 'routeParamsCntrl'}).
    when('a/:b/c/d/:e', {controller: 'routeParamsCntrl'}).
    otherwise({redirectTo: '/'});
}]);


的HTML

<body ng-app="routeParamsApp" ng-controller="routeParamsCntrl">
    <p>Current $routeParams is: {{routeParams}}</p>
</body>


控制者

routeParamsApp.controller('routeParamsCntrl', ['$scope', '$routeParams',
    function($scope, $routeParams) {
        $scope.routeParams = $routeParams;
    }]
);


在我在HTML中声明虚拟<div ng-view></div>之前,上面的代码不起作用。为什么?有没有在不声明$routeParams的情况下在控制器内使用ngView的解决方案?

最佳答案

指令ng-view用作在视图之间切换的容器。我认为它告诉AngularJS对模板进行摘要循环(即在开始时也对其进行编译)。

Docs


  ngView是一种指令,它通过将当前路线的渲染模板包含到主布局(index.html)文件中来补充$ route服务。每次当前路由更改时,包含的视图都会根据$ route服务的配置随之更改。
  
  需要安装ngRoute模块。


所以我们去$routeDocs


  ...
  您可以通过$ routeProvider的API定义路由。
  
  $ route服务通常与ngView指令和$ routeParams服务结合使用。

09-17 17:31