Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Angularjs 有没有办法让#/和#/:param在UI路由器中处于不同的状态?_Angularjs_Angular Ui Router_State - Fatal编程技术网

Angularjs 有没有办法让#/和#/:param在UI路由器中处于不同的状态?

Angularjs 有没有办法让#/和#/:param在UI路由器中处于不同的状态?,angularjs,angular-ui-router,state,Angularjs,Angular Ui Router,State,问题: 当我导航到#/时,它尝试加载配置文件状态,该状态位于#/:userId 所以我完全被这个功能弄糊涂了,因为它看起来是断断续续的。我已经提到过,似乎改变顺序没有任何影响 我想使用UI路由器创建干净的路由: #/这是用户的根控制面板 #/123这是一个特定的用户配置文件 #/my/preferences这是另一条路线 $stateProvider .state('profile', { abstract: true, url: '/:userId',

问题:

当我导航到
#/
时,它尝试加载
配置文件
状态,该状态位于
#/:userId

所以我完全被这个功能弄糊涂了,因为它看起来是断断续续的。我已经提到过,似乎改变顺序没有任何影响

我想使用UI路由器创建干净的路由:

#/
这是用户的根控制面板

#/123
这是一个特定的用户配置文件

#/my/preferences
这是另一条路线

  $stateProvider
    .state('profile', {
      abstract: true,
      url: '/:userId',
      templateUrl: 'profile-user.html',
      controller: 'ProfileController',
      controllerAs: 'vm',
      reloadOnSearch: false,
      resolve: {
        data: function() {
          // some promises stuff
        }
      }
    })
    .state('profile.activity', {
      url: '',
      templateUrl: 'activity.html'
    })
    .state('dashboard', {
      url: '/',
      templateUrl: 'dashboard.html',
      controller: 'DashboardController',
      controllerAs: 'vm',
      reloadOnSearch: false,
      resolve: {
        data: function() {
          // some promises stuff
        }
      }
    })
    .state('preferences', {
      url: '/my/preferences',
      templateUrl: 'preferences.html',
      controller: 'PreferencesController',
      controllerAs: 'vm',
      reloadOnSearch: false,
      resolve: {
        data: function() {
          // some promises stuff
        }
      }
    })
问题


有没有办法让UI路由器中的
#/
#/:param
#/someRoute/:someId
处于不同的状态?另外,是否有一种方法可以查看在UI路由器中注册了哪些路由以及它们的顺序?这将在调试期间非常有用。

当UI路由器尝试解析状态时,顺序是必不可少的。因此,定义更具体的状态应该比定义泛型状态更早:

// the specific will be checked first
.state('dashboard', {
  url: '/',
... 
.state('preferences', {
  url: '/my/preferences',
...
// these will be used if above not matched
.state('profile', {
  abstract: true,
  url: '/:userId',
...

这就是我所理解的,但这是真正奇怪的事情。在按照这个顺序定义状态之后,它会间歇性地工作。我在profile之后有另一个状态,我们将它称为
食物
,您可以通过
#/food/:foodId
导航到它。当我将另一个子状态/路径添加到
食品
时,它会打断我的仪表板路径并导致仪表板路径加载配置文件状态。我可以为
食品
任何内容命名子视图,但是,在
食物
状态中再添加一个子视图,似乎会导致
#/
路径出现奇怪的行为。逻辑非常简单。真正地只需按正确的顺序定义状态,因为UI路由器会在注册状态时对其进行迭代。它找到的第一个匹配项。。。使用该状态。这并没有那么神奇。我想说。。。尽快定义
/food
。。几乎是第一次。。因为它是唯一的名字,对吗?求你了,真的别想找什么挑战。。只要试着从最具体的到通用的组织状态定义-它将通过设计工作。首先,感谢您的帮助,我感谢您提供的信息。如果逻辑真的很简单,它只是在定义的路由集合上进行迭代,那么如果我请求首先明确定义的路由,它为什么会尝试加载链下定义的后续路由?同样,如果顺序是必需的,那么他们为什么会说?。