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

时间:2015-04-28 14:55:30

标签: angularjs angular-ui-router

我对Angular UI路由器进行了询问。

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

请参阅下面的代码段:

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

声明控制器//HERE //OR THERE是否有任何不同?

如果有,那有什么区别?

1 个答案:

答案 0 :(得分:2)

存在很大差异 - 因为只使用了一种或另一种。事实上,最重要的信息是:

  

控制器属于state。它属于view

如果有views : {}个对象,则每个视图都可以定义自己的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'
})

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