Angular ui-路由器参数导致与其他状态冲突
Angular ui-router parameter causes conflicts with other states
为了提供一些背景信息,我有一个包含多个独立模块的 Angular 应用程序。我正在使用 ui-router 为这些模块提供路由,我想在 URL 中使用模块的名称。在我的 Angular 应用程序配置块中,我为 module1 和 module2 定义了一个状态,每个状态都有一个参数,如下所示:
.state('module1', {
url: '/:module_name',
templateUrl: '/app/modules/module1/views/index.html',
controller: 'someCtrl'
})
.state('module2', {
url: '/:module_name',
templateUrl: '/app/modules/module2/views/index.html',
controller: 'someOtherCtrl'
})
我还有一些链接可以将我带到每个模块的主页。
自然地,问题是第一个状态将捕获我所有其余的 module2 路由,因为它们的 URL 都具有相同的形式:
http://localhost:3000/#/module1
http://localhost:3000/#/module2/users
http://localhost:3000/#/module2/books
等等。我可以看到我们定义统计信息的顺序很重要,但我似乎无法想出一种方法可以将模块名称作为状态参数(这很重要,因为我在相应的控制器中需要它区分uish 操作来自哪个模块)并完全避免这种层次结构问题。
有什么想法吗?
在您的情况下 ui-router 将不知道您指向的是哪条路由,因为它们完全相同。您要么必须对模块名称进行硬编码(假设只有几个):
.state('module1', {
url: '/module1',
templateUrl: '/app/modules/module1/views/index.html',
controller: 'someCtrl'
})
.state('module2', {
url: '/module2',
templateUrl: '/app/modules/module2/views/index.html',
controller: 'someOtherCtrl'
})
.state('module2', {
url: '/module2/users',
templateUrl: '/app/modules/module2/views/users.html',
controller: 'someOtherCtrl'
})
.state('module2', {
url: '/module2/books',
templateUrl: '/app/modules/module2/views/books.html',
controller: 'someOtherCtrl'
})
或者根据模块号
动态注入html
.state('module', {
url: '/module/:moduleId',
templateUrl:
function (stateParams){
return '/app/modules/module' + stateParams.moduleId + '/views/index.html';
}
controller: 'someOtherCtrl'
})
所以现在要点击模块一,路径如下所示
为了提供一些背景信息,我有一个包含多个独立模块的 Angular 应用程序。我正在使用 ui-router 为这些模块提供路由,我想在 URL 中使用模块的名称。在我的 Angular 应用程序配置块中,我为 module1 和 module2 定义了一个状态,每个状态都有一个参数,如下所示:
.state('module1', {
url: '/:module_name',
templateUrl: '/app/modules/module1/views/index.html',
controller: 'someCtrl'
})
.state('module2', {
url: '/:module_name',
templateUrl: '/app/modules/module2/views/index.html',
controller: 'someOtherCtrl'
})
我还有一些链接可以将我带到每个模块的主页。
自然地,问题是第一个状态将捕获我所有其余的 module2 路由,因为它们的 URL 都具有相同的形式:
http://localhost:3000/#/module1
http://localhost:3000/#/module2/users
http://localhost:3000/#/module2/books
等等。我可以看到我们定义统计信息的顺序很重要,但我似乎无法想出一种方法可以将模块名称作为状态参数(这很重要,因为我在相应的控制器中需要它区分uish 操作来自哪个模块)并完全避免这种层次结构问题。
有什么想法吗?
在您的情况下 ui-router 将不知道您指向的是哪条路由,因为它们完全相同。您要么必须对模块名称进行硬编码(假设只有几个):
.state('module1', {
url: '/module1',
templateUrl: '/app/modules/module1/views/index.html',
controller: 'someCtrl'
})
.state('module2', {
url: '/module2',
templateUrl: '/app/modules/module2/views/index.html',
controller: 'someOtherCtrl'
})
.state('module2', {
url: '/module2/users',
templateUrl: '/app/modules/module2/views/users.html',
controller: 'someOtherCtrl'
})
.state('module2', {
url: '/module2/books',
templateUrl: '/app/modules/module2/views/books.html',
controller: 'someOtherCtrl'
})
或者根据模块号
动态注入html.state('module', {
url: '/module/:moduleId',
templateUrl:
function (stateParams){
return '/app/modules/module' + stateParams.moduleId + '/views/index.html';
}
controller: 'someOtherCtrl'
})
所以现在要点击模块一,路径如下所示