显然,我的应用程序会自动以默认状态(具有url:“/”)启动。我们称之为州A
。
我希望在某种情况下是真实的时候再坚持下去。这意味着,如果x === 4
,那么我希望状态B
成为第一个加载的状态。
我的问题是,当我检查该条件时,例如在app.run
中,默认状态已经被加载并显示在视图中,然后才切换到状态B
。
有没有什么方法可以阻止状态加载并在我检查条件后启动它?
答案 0 :(得分:1)
正如评论中所讨论的,我们可以使用UI-Router附带的本机内置功能。其中一个是$urlRouterProvider.deferIntercept(defer)
禁用(或启用)延迟位置更改拦截。
如果您希望自定义同步URL的行为(例如,如果您希望延迟转换但保留当前URL),请在配置时调用此方法。然后,在运行时,在配置自己的
$urlRouter.listen()
事件处理程序后调用$locationChangeSuccess
。
予。步骤 - 停止执行
因此,我们可以在 .config()
阶段
.config(['$stateProvider', '$urlRouterProvider','$locationProvider',
function ($stateProvider, $urlRouterProvider,$locationProvider) {
// States
$stateProvider
...
.state('parent', {
...
})
.state('parent.child', {
...
})
;
...
// here we say STOP
$urlRouterProvider.deferIntercept();
}
])
II。步骤 - 初始化.run()中需要的内容 - 重新启用执行
这可能是一些天真的运行示例:
.run(['$urlRouter', '$timeout', '$state',
function($urlRouter, $timeout, $state) {
$timeout(function(){
// here we turn all on again...
$urlRouter.sync();
$urlRouter.listen();
// there could be some decision, driven by $http load
// we just use some state as default target
$state.go("parent.child");
}, 1000)
}]);
Se等待一秒钟,然后我们重新启用所有执行并重定向到" parent.childd" ......但可以是任何其他的,基于在 .run()
阶段做出的决定
检查here
答案 1 :(得分:0)