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
。。几乎是第一次。。因为它是唯一的名字,对吗?求你了,真的别想找什么挑战。。只要试着从最具体的到通用的组织状态定义-它将通过设计工作。首先,感谢您的帮助,我感谢您提供的信息。如果逻辑真的很简单,它只是在定义的路由集合上进行迭代,那么如果我请求首先明确定义的路由,它为什么会尝试加载链下定义的后续路由?同样,如果顺序是必需的,那么他们为什么会说?。