我的路线设置如下。令人沮丧的是view.tab
中的视图已加载但其控制器未被调用。我试过没有参数,但它仍然没有按预期工作。有没有人知道如何解决这个问题?
$stateProvider
.state('index', {
url: '/',
templateUrl: viewsRoot + 'restaurants/index.htm',
controller: 'RestaurantsCtrl'
})
.state('view', {
url: '/view',
controller: 'RestaurantsViewCtrl',
templateUrl: viewsRoot + '/restaurants/view.htm'
})
.state('view.tab', {
url: '/orders',
// controller: 'OrdersIndexCtrl',
controller: function ($scope) {
alert('This does not run');
},
views: {
"view": {
templateUrl: viewsRoot + '/restaurants/orders.htm'
}
}
});
$urlRouterProvider.otherwise("/");
答案 0 :(得分:2)
您需要在模板旁边声明控制器:
views: {
"view": {
templateUrl: viewsRoot + '/restaurants/orders.htm',
controller: 'MyController' // (or a function, etc.)
}
UI-Router wiki类型暗示了这一点:
如果定义视图对象,则将忽略状态的templateUrl,template和templateProvider。因此,如果您需要这些视图的父布局,则可以定义包含模板的抽象状态,以及包含“views”对象的布局状态下的子状态。
控制器与视图配对。因此,如果忽略状态上定义的“模板”属性,则似乎暗示它也会忽略控制器。
如果您希望所有命名视图共享控制器,请按照wiki的建议定义抽象父状态。