【发布时间】:2014-05-23 00:54:05
【问题描述】:
我遇到的情况是 Angular $routeProvider 似乎没有在路由更改时触发控制器操作。
路由是超级简单的url:
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
并且 url 发生变化,我可以看到 test.html 模板被浏览器访问,但控制器永远不会触发。
这似乎表明路由正在被 URL 更改激活,但由于某种原因控制器没有触发。我尝试过使用函数而不是控制器名称,但这也永远不会被解雇。我还通过将 ng-controller="navController" 附加到元素来验证控制器是否有效,并且可以很好地触发控制器。
这是一个最初没有关联路由的页面,因为它基本上是一个独立的页面,不需要导航。事后我添加了路线代码。我添加了一个 ng-view(之前没有),之后至少模板开始加载 - 没有 ng-view 什么都不会发生。
难住了,不知道还能看什么。帮助。
【问题讨论】:
-
所以当你进入 /nav 时,你看到的是 html 而不是控制器?有没有可能遇到订购问题?您可以尝试在控制器的创建中设置一个断点发生得太晚了吗?
-
没有实际发生的事情是 HTML 会加载到浏览器中(devtools 视图),但控制器不会触发。 html 也没有呈现。想通了 - 请参阅下面的答案。
标签: angularjs angularjs-routing