2016-11-07 66 views
0

只是为了给出一些上下文,我有一个Angular应用程序与几个单独的模块。我正在使用ui-router为这些模块提供路由,并且我想使用URL中模块的名称。在我的角度应用程序配置块我已经在各确定两个模块1和模块2带有参数的状态,像这样:角度ui路由器参数导致与其他状态冲突

.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' 
}) 

我也有要带我到每个模块的主页几个环节。

当然,问题是,第一状态会赶上我所有的模块2路线的休息,因为他们的网址都有相同的形式:

http://localhost:3000/#/module1

http://localhost:3000/#/module2/users

http://localhost:3000/#/module2/books

等等。我可以看到我们如何定义统计信息的顺序很重要,但似乎无法想出将模块名称作为状态参数的方法(这很重要,因为我在相应的控制器中需要它以区分操作来自哪个模块)并且完全避免这个层次结构问题。

任何想法?

回答

1

在你的情况下,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' 
}) 

所以现在打模块一个路径看起来像这样

http://localhost:3000/#/module/1

+0

太棒了。我使用动态注入选项,它的工作完美。正是我需要的,谢谢! – ashe540