我有一种情况,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没有任何反应。
难倒,不知道还有什么要看的。帮助
答案 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'];