$ routeProvider没有触发控制器

时间:2014-05-23 00:54:06

标签: angularjs angularjs-routing

我有一种情况,Angular $ routeProvider似乎不会在路由更改时触发控制器操作。

路线是超级简单的网址:

window.app = angular.module('app', ['ngRoute', 'app.filters', 'app.services', 'app.directives', 'app.controllers'])
    .config([
        '$routeProvider', function($routeProvider) {
            console.log("app.js config launched");

            $routeProvider
                .when('/nav', {
                    templateUrl: 'temp/test.html',
                    controller: 'navController'
                    // controller: function($scope) { alert('scope called.') }                    
                })
                .when('/home', {
                    controller: 'homeController',
                    template: ' '
                });

            $routeProvider.otherwise({ redirectTo: '/home' });
        }
    ]);

控制器只是注销以验证访问权限:

app.controller('navController', [
    "$scope", "cellService",
    function ($scope, cellService) {
        console.log("**** navController fired");
    }
]);

初始化代码触发,因此初始化路由。当我点击:

http://localhost:4333/app/#/nav

和网址更改我可以看到浏览器访问了test.html模板,但控制器从未触发。

这似乎表明路由被URL更改激活,但由于某种原因控制器没有触发。我尝试过使用函数而不是控制器名称,但是也永远不会被触发。我还通过将ng-controller =“navController”附加到元素来验证控制器是有效的,并且可以很好地触发控制器。

这是一个最初没有关联路由的页面,因为它基本上是不需要导航的单个自包含页面。我事后添加了路由代码。我添加了一个ng-view(之前没有一个),之后至少模板开始加载 - 没有ng-view没有任何反应。

难倒,不知道还有什么要看的。帮助

2 个答案:

答案 0 :(得分:2)

事实证明问题确实是我的操作员错误,但我认为这是一个可能导致问题的情况,所以我将此作为答案。

导致此问题的问题有两个:

  • HTML模板HTML页面(通过templateUrl)的URL无效,因此页面从未加载 因此,控制器没有被解雇。

  • 切换到模板时,我使用了一个空模板("")但也有 删除了ng-View指令。 ng-View指令必须存在 即使使用空模板。如果没有它,控制器就不会发射。

在这两种情况下它都没有工作,我错误地认为控制器没有被解雇,这让人感到困惑,因为如果我明确地将它与ng-controller连接起来就会触发它。

Yup普通操作员错误,但后者非常重要 - 没有ng-View控制器不会触发。

答案 1 :(得分:2)

如果您在外部定义函数并引用该函数会发生什么?而不是

.when('/nav', {
                templateUrl: 'temp/test.html',
                controller: 'navController'
                       })

这将是

.when('/nav', {
                templateUrl: 'temp/test.html',
                controller: navController
                              })

和其他地方

 function navController($scope, cellService){
    console.log("**** navController fired");
 }
 navController.$inject = ['$scope', 'cellService'];