我正在使用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();
}]
}
});
}]);
但是当我收到此错误时:
Uncaught Error: [$injector:modulerr] Failed to instantiate module yetibox due to:
Error: State 'admin'' is already defined
如何在配置中配置它......
答案 0 :(得分:0)
状态需要在angualar应用程序中是唯一的,无论加载的模块如何。在您的示例中,模块adminui
定义了一个名为admin
的状态,模块yetibox
也是如此。
因此,不可能以某种方式在另一个模块中配置状态的一部分 - 它将尝试创建一个新状态。
问题是你想要这样做的原因?根据您的问题,您希望解析当前用户,使其可用于您的admin
州。这似乎是使用状态层次结构的好例子。所以类似于:
$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'
});
并非这些状态可以非常安全地加载到不同的模块中。
如果您不喜欢状态名称中的'dot'表示法来表示层次结构,则可以改为使用parent
属性:
没有两个州可以拥有相同的名称。使用点符号时 如果没有明确提供,则推断父项,但事实并非如此 改变州名。不使用点表示法时,
parent
必须是 明确提供,但你仍然不能说出任何两个州的名字 相同的,例如你不能有两个不同的状态名为“编辑” 即使他们有不同的父母。
https://github.com/angular-ui/ui-router/wiki/Nested-States-and-Nested-Views