为什么Angular $ routeProvider配置需要在HTML中声明的ngView

时间:2013-11-17 14:16:57

标签: javascript html angularjs

我没有要求使用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

1 个答案:

答案 0 :(得分:3)

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

来自Docs

  

ngView 是一种指令,它通过将当前路由的呈现模板包含到主布局(index.html)文件中来补充 $ route 服务。每当当前路由发生变化时,包含的视图都会根据$ route服务的配置随之改变。

     

需要安装 ngRoute 模块。

所以我们转到$routeDocs

  

...   您可以通过$ routeProvider的API定义路线。

     

$ route服务通常与 ngView 指令和 $ routeParams 服务一起使用。