首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在canDeactivate方法中添加导航

在canDeactivate方法中添加导航
EN

Stack Overflow用户
提问于 2019-05-08 22:23:40
回答 1查看 73关注 0票数 0

CanDeactivate卫兵。

有没有可能,当离开一个组件时,canDeactivate不仅会呈现一个带有是/否的确认窗口,而且还会导航到另一个组件?如下所示:

代码语言:javascript
复制
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.registrationService.isRegistered()) {
  return true;
} else {
  if (!confirm('If you do not register, your data will be lost. Click Cancel to go to Registration page.')) {
    console.log('before');
    this.router.navigate(['register']); // <----
    console.log('after');
    return false;
  } else { return true; }
}

}

现在这不是工作了。当点击Cancel一次又一次的打开确认窗口,并且在cosole中是:‘之前’,‘之后’。仅当首次单击取消,然后单击确定时,才重定向到注册页面。

更新:看起来我用承诺解决了这些问题。

代码语言:javascript
复制
private isCanDeactivate: boolean;
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
 if (this.registrationService.isRegistered()) {
   return true;
 } else {
   if (!confirm('If you do not register, your data will be lost. Click Cancel to go to Registration page.')) {
     console.log('press Cancel');
     this.retrieve().then(() => this.afterPromise());
     return this.isCanDeactivate;
   } else {
     console.log('press Ok');
     return true; }
  }
}

private retrieve(): Promise<any> {
 return new Promise((resolve) => {
   this.retrieveDataResolver = resolve;
   this.setIsCanDeactivate();
 });
}

private setIsCanDeactivate(): void {
 this.isCanDeactivate = true;
 this.retrieveDataResolver();
}
private afterPromise() {
 this.router.navigate(['register']);
}

有人能提供更好的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-08 22:35:52

假设寄存器寄存器组件路径是‘’,您可以使用以下方法

代码语言:javascript
复制
this.router.navigateByUrl('register');

您还可以使用location.back()导航到最后一页。

代码语言:javascript
复制
import {Component} from '@angular/core';
import {Location} from '@angular/common';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss'],
 })
class LoginPage {

  constructor(private location: Location) 
  {}

  onBackClicked() {
    this.location.back();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56042977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档