Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度UI路由器:多个URL到单个状态_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 角度UI路由器:多个URL到单个状态

Javascript 角度UI路由器:多个URL到单个状态,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我已经开始使用angular的ui路由器,我正试图找出如何让多个URL引用一个状态。例如: /orgs/12354/overview //retyrns the same pages as /org/overview 我的$state提供程序当前设置了类似的内容,我不清楚如何滑入别名“/org/overview”路径,以便它正确地从“org”父级继承 .state('org', { abstract: true, url: '/orgs/:orgID', templateUrl:

我已经开始使用angular的ui路由器,我正试图找出如何让多个URL引用一个状态。例如:

/orgs/12354/overview
//retyrns the same pages as
/org/overview
我的$state提供程序当前设置了类似的内容,我不清楚如何滑入别名“/org/overview”路径,以便它正确地从“org”父级继承

.state('org', {
  abstract: true,
  url: '/orgs/:orgID',
  templateUrl: '/client/navigation/main.html'
})
.state('org.overview', {
  url: '/overview',
  templateUrl: '/client/overview/overview.html',
  controller: 'OverviewCtrl'

})

我认为您只需要定义子状态,而不需要像下面这样的url

.state('org', {
  abstract: true,
  url: '/orgs/:orgID',
  templateUrl: '/client/navigation/main.html'
})
.state('org.1', {
  templateUrl: '/client/overview/one.html',
  controller: 'OverviewCtrl'
})
.state('org.2', {
  templateUrl: '/client/overview/two.html',
  controller: 'OverviewCtrl'
})
.state('org.3', {
  templateUrl: '/client/overview/three.html',
  controller: 'OverviewCtrl'
})

首先,抽象状态不返回视图

此外,由于您试图在列表视图中使用复数形式的
orgs
,在项目视图中使用单数形式的
org
,因此无法使用附加路由,这是默认行为

.state('org', {
  url: '/orgs',
  templateUrl: '/client/navigation/main.html'
})
.state('org.overview', {
  url: '^/org/:orgID/overview'
  templateUrl: '/client/overview/overview.html',
  controller: 'OverviewCtrl'
})

这可以使用
when()
实现。假设这是要使用多个URL指向的状态

.state('app.home',
  {
    url: '/home',
    templateUrl: 'home.html',
    controller: 'homeCtrl'
  })
config()
中,可以使用
when()
如下:

angular.module('myApp', [])
   .config($urlRouterProvider){
       $urlRouterProvider.when(/homepage, ['$state','$match', function ($state, $match) {
          $state.go('app.home');
 }]);
}

同样,您可以添加指向同一状态的多个URL。

这怎么知道“/overview”是有效的路由,因为它不是/orgs路径的一部分?我还没有测试过这一点,但您应该能够将控制器置于抽象状态,因为它在所有子级中都是相同的,对吗?如果您想要一个类似于/orderOverview的状态“orderOverview”的URL,并且由于不同的上下文,您想要另一个类似于/orderHistory的URL,该URL应指向相同的状态“orderOverview”,但将输入/使用的URL保留在地址栏中,则此解决方案将不起作用。您的解决方案将导致更改URL。