是否有不同的方法来声明与 Angular UI 路由器状态关联的控制器

Are there different ways of declaring the controller associated with an Angular UI Router state

我对 Angular UI 路由器有疑问。

顶级视图级别声明与状态关联的控制器有什么不同吗?

请参阅下面的代码段:

.state('signup', {
    controller: 'SignupCtrl',//HERE
    views: {
        '@': {
            controller: 'SignupCtrl',//OR THERE
            templateUrl: 'signup/views/signup.html'
        }
    }
})

声明控制器有什么不同吗//HERE //OR THERE

如果有,有什么区别?

有很大的不同 - 因为只使用了一个或另一个。其实最重要的消息是:

controller does not belong to state. It belongs to view!

如果有 views : {} 对象,每个 view 可以有自己的 controller 定义。

.state('myState', {
    views: {
        '@': {
            controller: 'SignupCtrl',
            templateUrl: 'signup/views/signup.html'
        },
        'hint@': {
            controller: 'HintCtrl',
            templateUrl: 'signup/views/signup.html'
        }
    }
})

有一个例外视图定义。如果我们以状态父级中的 ui-view="" 为目标,就会发生这种情况。那样的话,我们还是可以这样写:

.state('myState', {
    views: {
        '': {
            controller: 'SignupCtrl',
            templateUrl: 'signup/views/signup.html'
        },
    }
})

但是我们可以使用简化版本,等于这个定义:

.state('myState', {
    controller: 'SignupCtrl',
    templateUrl: 'signup/views/signup.html'
})

所以最后两个是相等的。但同样,在上一个示例中,我们只使用了简化版本。控制器始终属于视图(模板)而不是状态...