【发布时间】:2020-03-29 01:52:33
【问题描述】:
我的离子应用程序中有两条路线,欢迎页面和主页,欢迎用户必须回答一个问题,之后,他会重定向到主页,我想要做的是跳过第一条路线如果用户已经回答了问题。
这是我的警卫:
export class CheckWelcomeGuard implements CanActivate {
constructor(private router: Router, private dbstorage: DatabaseService) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): boolean {
this.dbstorage.getDatabaseState().subscribe(ready => {
if (ready) {
this.dbstorage.checkSettingsValue("WELCOME_PAGE_PASSED").then(data => {
if (data) {
return true;
}
});
}
});
this.router.navigate(["/welcome"], {
queryParams: { redirect: state.url },
replaceUrl: true
});
return false;
}
}
取决于此,重定向发生在检查甚至执行之前!不断保持重定向到欢迎页面!
private database: SQLiteObject;
private dbReady: BehaviorSubject<boolean> = new BehaviorSubject(false);
settings = new BehaviorSubject([]);
constructor(
private platform: Platform,
private sqlite: SQLite,
private http: HttpClient
) {
this.platform.ready().then(() => {
this.createDatabaseObject();
});
}
createDatabaseObject() {
this.sqlite
.create({
name: "testapp.db",
location: "default"
})
.then((db: SQLiteObject) => {
this.database = db;
this.seedDatabase();
});
}
seedDatabase() {
this.http
.get("assets/testapp.sql", { responseType: "text" })
.subscribe(sql => {
this.database.executeSql(sql, [])
.then(() => {
// this.clearSettings();
console.log('Executed SQL');
this.dbReady.next(true);
})
.catch(e => console.log(e));
});
}
// Database state
// ready: true
// not ready: false
getDatabaseState() {
return this.dbReady.asObservable();
}
【问题讨论】: