显然,我的应用程序会自动以默认状态启动(具有url:“/”)。我们称之为A
。Angular - 动态选择开始状态
我想在这种情况下坚持一定的条件是真的。这意味着如果x === 4
例如,然后我想要状态B
成为第一个加载。
我的问题是,当我检查该条件时,例如在app.run
中,默认状态已被加载并显示在视图中,然后才切换到状态B
。
有没有什么办法可以阻止状态加载并在我检查条件后才能启动它?
显然,我的应用程序会自动以默认状态启动(具有url:“/”)。我们称之为A
。Angular - 动态选择开始状态
我想在这种情况下坚持一定的条件是真的。这意味着如果x === 4
例如,然后我想要状态B
成为第一个加载。
我的问题是,当我检查该条件时,例如在app.run
中,默认状态已被加载并显示在视图中,然后才切换到状态B
。
有没有什么办法可以阻止状态加载并在我检查条件后才能启动它?
正如在评论中讨论,我们可以使用本机,内置的功能,与UI-路由器的到来。其中之一是$urlRouterProvider.deferIntercept(defer)
禁用(或启用)推迟位置变更拦截。
如果您希望自定义同步URL的行为(例如,如果您希望推迟过渡但保留当前URL),请在配置时调用此方法。然后,在运行时,在配置了自己的
$locationChangeSuccess
事件处理程序后,请致电$urlRouter.listen()
。
一步骤 - 停止执行
所以,我们可以在.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)
}]);
硒都等待一秒钟,然后我们就重新启用所有执行并重定向到“parent.childd” ...但可以是任何其他的基础上,.run()
阶段做了一些决定
检查它here
非常感谢! –
$routeProvider
.when('/' ,{
templateUrl: "templates/A.html",
resolve:{
"check":function($location){
if(x==4){
$location.path('/B');
}
}
}
})
.when('/B' ,{
templateUrl: "templates/B.html"
})
.otherwise({redirectTo: '/'});
我试过这样,但条件是依赖于异步结果,所以它不工作。无论如何,它显示了这个视图。 –
应该至少提到,'ngRoute'和'UI-Router'是不一样的... –
@downvoter,小心解释你的downvote? – Zee
不会是'$ urlRouterProvider.otherwise(功能($ injecto r,$ location){...}'解决方案吗?关于[$ urlRouterProvider]的更多细节(http://angular-ui.github.io/ui-router/site/#/api/ui.router.router.$urlRouterProvider)。如果你还需要**。run()**阶段...推迟执行可能是解决方案http:// stackoverflow。com/questions/30455792/start-angular-js-route-segment-or-ui-router-after-all-translations-are-loaded –
你不能在$ routeProvider中使用解析,然后重定向到正确的路由 – George
@RadimKöhler我会检查并报告,谢谢。 –