Angularjs AngularUI配置状态

Angularjs AngularUI配置状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我正在使用angularUI来配置一个路由,如下所示: angular.module('adminui').config(['$urlRouterProvider', '$stateProvider', '$locationProvider', function($urlRouterProvider, $stateProvider, $locationProvider){ $locationProvider.html5Mode(true); $stateProvi

我正在使用angularUI来配置一个路由,如下所示:

    angular.module('adminui').config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
  function($urlRouterProvider, $stateProvider, $locationProvider){

    $locationProvider.html5Mode(true);

    $stateProvider
    .state('admin', {
      url: '/admin',
      templateUrl: 'vimes1984_foundation-angular-admin_client/templates/admin.ng.html',
      controller: 'adminCtrl'
    });
}]);
angular.module('yetibox').config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
  function($urlRouterProvider, $stateProvider, $locationProvider){
    $stateProvider
    .state('admin', {
        resolve: {
              "currentUser": ["$meteor", function($meteor){
                return $meteor.requireUser();
              }]
            }
    });

}]);
我尝试在另一个配置中配置解析,如下所示:

    angular.module('adminui').config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
  function($urlRouterProvider, $stateProvider, $locationProvider){

    $locationProvider.html5Mode(true);

    $stateProvider
    .state('admin', {
      url: '/admin',
      templateUrl: 'vimes1984_foundation-angular-admin_client/templates/admin.ng.html',
      controller: 'adminCtrl'
    });
}]);
angular.module('yetibox').config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
  function($urlRouterProvider, $stateProvider, $locationProvider){
    $stateProvider
    .state('admin', {
        resolve: {
              "currentUser": ["$meteor", function($meteor){
                return $meteor.requireUser();
              }]
            }
    });

}]);
但当我遇到这个错误时:

Uncaught Error: [$injector:modulerr] Failed to instantiate module yetibox due to:
Error: State 'admin'' is already defined
如何跨配置进行配置


无论加载了哪些模块,angualar应用程序的状态都必须是唯一的。在您的示例中,模块
adminui
定义了一个名为
admin
的状态,模块
yetibox
也是如此

因此,不可能在另一个模块中以以下方式配置状态的一部分-它将尝试并创建一个新状态

问题是你为什么要这么做?从您的问题来看,您希望解析当前用户,使其可供您的
管理员
状态使用。这看起来是使用状态层次结构的好例子。类似于:

$stateProvider
    .state('root', {
        abstract: true,
        resolve: {
              "currentUser": ["$meteor", function($meteor){
                return $meteor.requireUser();
              }]
            }
    })
    .state('root.admin', {
      url: '/admin',
      templateUrl: 'vimes1984_foundation-angular-admin_client/templates/admin.ng.html',
      controller: 'adminCtrl'
    });
并不是说这些状态可以安全地加载到不同的模块中

如果您不喜欢在州名称中使用“点”表示法来表示层次结构,则可以使用
parent
属性:

没有两个州可以有相同的名称。使用点表示法时 如果未显式提供父级,则会推断父级,但不提供父级 更改州名称。当不使用点表示法时,
父项
必须 显式提供,但您仍然无法命名任何两个状态 相同,例如,您不能有两个名为“编辑”的不同状态 即使他们有不同的父母


无论加载了哪些模块,angualar应用程序的状态都必须是唯一的。在您的示例中,模块
adminui
定义了一个名为
admin
的状态,模块
yetibox
也是如此

因此,不可能在另一个模块中以以下方式配置状态的一部分-它将尝试并创建一个新状态

问题是你为什么要这么做?从您的问题来看,您希望解析当前用户,使其可供您的
管理员
状态使用。这看起来是使用状态层次结构的好例子。类似于:

$stateProvider
    .state('root', {
        abstract: true,
        resolve: {
              "currentUser": ["$meteor", function($meteor){
                return $meteor.requireUser();
              }]
            }
    })
    .state('root.admin', {
      url: '/admin',
      templateUrl: 'vimes1984_foundation-angular-admin_client/templates/admin.ng.html',
      controller: 'adminCtrl'
    });
并不是说这些状态可以安全地加载到不同的模块中

如果您不喜欢在州名称中使用“点”表示法来表示层次结构,则可以使用
parent
属性:

没有两个州可以有相同的名称。使用点表示法时 如果未显式提供父级,则会推断父级,但不提供父级 更改州名称。当不使用点表示法时,
父项
必须 显式提供,但您仍然无法命名任何两个状态 相同,例如,您不能有两个名为“编辑”的不同状态 即使他们有不同的父母