PROBLEM
I want a situation where if a user has gone through the onboarding process and register the first time, they should be redirected to the login page the second time and after but this solution works only on web, but when compiled to apk it does not work, it returns the user to the index page.
MY SOLUTION (ROUTES.JS)
var routes = [
{
path: '/',
on: {
pageInit: function (e, page) {
// do something when page initialized
const self = this;
// const app = self.$f7;
const app = self.app;
localStorage = window.localStorage;
// return false;
if ( localStorage.getItem('onboarding-completed') == 'true' && localStorage.getItem('user-type') == "user" ) {
// check if the user is logged in
var view = app.views.create(".view-main",{
url: '/'
});
if ( localStorage.getItem('logged-in') == 'true' ) {
view.router.navigate('/user-dashboard/');
}else{
view.router.navigate('/user-login/');
}
}
if ( localStorage.getItem('onboarding-completed') == 'true' && localStorage.getItem('user-type') == "rider" ) {
var view = app.views.create(".view-main",{
url: '/'
});
if ( localStorage.getItem('logged-in') == 'true' ) {
view.router.navigate('/user-dashboard/');
}else{
view.router.navigate('/rider-login/');
}
}
},
}
},
Здесь другая логика с resolve: оно не изменить маршрут в отличии от async. Нужно вызывать после reject такое router.navigate в соответствующем контексте
beforeEnter resolve doesn’t accept any arguments. resolve() means allow navigating to route, if you need to load something else, then ONLY in beforeEnter you should do:
reject()
var router = this;
router.navigate('/another-page/');
Your beforeEnter example also totally wrong, resolve DOES NOT accept arguments there. If you want to load another route there, you FIRST NEED TO DO reject
beforeEnter: function (routeTo, routeFrom, resolve, reject) {
var router = this;
if (needToRedirect) {
// REJECT FIRST
reject();
// THEN NAVIGATE
router.navigate('/some-path/');
// RETURN
return;
}
// JUST RESOLVE TO KEEP LOADING CURRENT ROUTE
resolve();
}