Angularjs AngularUI配置状态
我正在使用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
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
属性:
没有两个州可以有相同的名称。使用点表示法时
如果未显式提供父级,则会推断父级,但不提供父级
更改州名称。当不使用点表示法时,父项
必须
显式提供,但您仍然无法命名任何两个状态
相同,例如,您不能有两个名为“编辑”的不同状态
即使他们有不同的父母