顯然,我的應用程序會自動以默認狀態啓動(具有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我會檢查並報告,謝謝。 –