Angular ui-router不在嵌套路由中调用子控制器

时间:2015-06-15 20:15:00

标签: angularjs angular-ui-router

我的路线设置如下。令人沮丧的是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("/");

1 个答案:

答案 0 :(得分:2)

您需要在模板旁边声明控制器:

views: {
            "view": {
                templateUrl: viewsRoot + '/restaurants/orders.htm',
                controller: 'MyController' // (or a function, etc.)
        }

UI-Router wiki类型暗示了这一点:

  

如果定义视图对象,则将忽略状态的templateUrl,template和templateProvider。因此,如果您需要这些视图的父布局,则可以定义包含模板的抽象状态,以及包含“views”对象的布局状态下的子状态。

控制器与视图配对。因此,如果忽略状态上定义的“模板”属性,则似乎暗示它也会忽略控制器。

如果您希望所有命名视图共享控制器,请按照wiki的建议定义抽象父状态。