我正在尝试调用一个控制器,该控制器应该与home.category
路由链接,但它没有被调用。它有什么问题?
$stateProvider
.state("home", {
// Use a url of "/" to set a states as the "index".
url: "/",
templateUrl: APP_CONFIG.baseUrl +
'partials/layouts/home.html',
controller: 'MainCtrl'
})
.state("home.category", {
// Use a url of "/" to set a states as the "index".
url: "c/:categoryId/:categorySlug",
controller: function($stateParams) {
alert($stateParams.categoryId);
}
})
答案 0 :(得分:79)
好吧,我从ui-router
说明
您可以将控制器分配给模板。 警告:如果未定义模板,则不会实例化控制器。
https://github.com/angular-ui/ui-router/wiki#controllers
但是我试图添加template
但仍然没有用,然后我看到我的父路由模板没有<div ui-view></div>
(我错误地删除了它)所以当我把它添加回去的时候工作:),所以,要实例化我们孩子的路由控制器,我们必须在父路由模板中有<div ui-view></div>
。
答案 1 :(得分:40)
可能无法调用控制器的另一个原因是,如果您有一个状态的多个视图,并且不将控制器放在视图对象中。这很难找到,因为没有错误。它只是没有被调用。
不会调用此控制器:
.state('home', {
url: '/',
controller: function($scope){ $scope.someThings = "some stuff"; },
views: {
"view1": {
template: '<p>{{someThings}}</p>'
},
"": {
template:
'<p>Some other stuff</p>'
}
}
})
控制器必须进入视图对象:
.state('home', {
url: '/',
views: {
"view1": {
template: '<p>{{someThings}}</p>',
controller: function($scope){ $scope.someThings = "some stuff"; },
},
"": {
template:
'<p>Some other stuff</p>'
}
}
})
答案 2 :(得分:3)
在关闭事件中有人正在更改项目以使用ui.router而不是ngRoute,我有这个问题,因为我忘了将ng-view指令更改为ui-view:Z