ui路由器——具有一条路由'的URL与另一个具有$stateParams的状态共享同一级别
ui-router-- having a route's URL share the same level as another state with $stateParams?
我想在我的应用程序中做这样的事情,其中相同级别的URL要么是绝对命名的baz
状态,要么是接受参数的biz
状态。
angular.module('foo')
.config(function($stateProvider){
$stateProvider
.state('baz', {
url: '/baz',
templateUrl: '/templates/baz.html'
})
.state('biz', {
url: '/:biz',
templateUrl: '/templates/biz.html',
resolve: {
biz: function($stateParams){
// resolve whatever $stateParams.biz should be
}
}
})
})
然而,现在发生的情况是ui路由器总是进入biz
状态,并将"baz"解释为该状态的参数。有没有一种优雅的方法可以让ui路由器知道,任何命中"/baz"的东西都应该解析为baz
状态?
我知道我可以使用$stateChangeStart
做一些类似的事情:
$rootScope.$on('$stateChangeStart', function(event, toState, toParams){
if (toParams.biz === "baz"){
event.preventDefault();
$state.go('baz')
}
})
但这一点都不优雅,看起来像是一个黑客。
我在这里创建了一个plunker,它实际上表明,上面的状态片段正在工作。为什么,因为这些状态是按照正确的顺序定义的:
.state('baz', {
url: '/baz', // url '/baz' is registered first, will be find and used
...
})
.state('biz', {
url: '/:biz', // '/baz' will never reach this, because is already handled
...
我们如何让它坏掉,就是切换状态def:
.state('biz', {
url: '/:biz', // '/baz' will be handled by this state
...
.state('baz', {
url: '/baz', // url '/baz' never reach this state def...
...
})
检查此处的断开链接
摘要:
状态定义顺序很重要使用第一个状态
url
匹配
相关文章:
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 无法在现有状态转换期间更新-未使用任何非法的setState()
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- $stateParams,如何将值从一个状态传递到另一个状态
- AngularJs :将 stateParams 值附加到状态对象中的自定义数据
- 使用UI路由器访问从解析函数调用的服务中新状态的$stateParams
- ui路由器——具有一条路由'的URL与另一个具有$stateParams的状态共享同一级别