當用戶轉到特定狀態(/login
)時,我顯示並隱藏了一個模式,但如果用戶從/login
轉到/register
,我會將模式保留在後臺。如何知道ui路由器中的下一個狀態
如果用戶在/login
,然後去/register
,我會登錄模式保持打開,而如果用戶在/login
,然後去不同的頁面,我會登錄模式消失。
其實我設置這樣的Angular-ui-router
$stateProvider
:
app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
.state('home', {
url: "/",
templateUrl: "templates/home.html",
controller: 'HomeCtrl'
})
.state('login', {
url: "/login",
onEnter: function ($stateParams, $state, Modal) {
// * modalCtrl for Login
if (window.loginModal) {
window.loginModal.remove();
delete window.loginModal;
Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
window.loginModal = modal;
loginModal.show();
});
} else {
Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
window.loginModal = modal;
loginModal.show();
});
}
},
onExit: function ($stateParams, $state) {
if (window.loginModal && /* condition like "!nextState.is('register')" */) {
window.loginModal.hide();
}
}
})
.state('register', {
url: "/register",
onEnter: function ($stateParams, $state, Modal, SlideBoxDelegate) {
// * modalCtrl for Register
if (window.registerModal) {
window.registerModal.remove();
delete window.registerModal;
Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
window.registerModal = modal;
SlideBoxDelegate.update();
registerModal.show();
});
} else {
Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
window.registerModal = modal;
SlideBoxDelegate.update();
registerModal.show();
});
}
},
onExit: function ($stateParams, $state) {
if (window.registerModal) {
window.registerModal.hide();
}
}
})
.state('not_found', {
url: "/not_found",
templateUrl: 'templates/not_found.html',
controller: 'NotFoundCtrl'
})
$urlRouterProvider.otherwise("/not_found");
$locationProvider.html5Mode(true);
})
有沒有一種方法來設置condition like "!nextState.is('register')"
?
謝謝您的閱讀:)
有關此服務的任何詞語? – kentcdodds
如果'onExit'回調具有* toState *和* toParams *就好像'$ stateChangeStart'那樣。同樣適用於'onEnter' – JobaDiniz