Ionic 在离开页面后不会破坏页面

Lua*_*sto 1 typescript ionic-framework angular

由于工作上的一些需要,我开始使用 Ionic(TypeScript + Angular),我以前从未为移动设备编写过代码,这是我第一次。

我遇到了一个问题,我不知道如何解决它,让我尝试解释一下流程:

流程1

  1. UserA使用其用户名/密码登录
  2. UserA登录后重定向至个人资料页面
  3. UserA注销

流程2

  1. UserB使用其用户名/密码登录
  2. 用户B在登录后被重定向到个人资料页面(并且他看到了用户A的个人资料信息)

注意事项

我正在使用 @ionic/storage 存储会话,但与存储问题无关,我知道因为注销后我尝试等待session.get('user')并且它返回未定义,并且在新登录后我wait session.get('user')并显示正确的用户(刚刚连接的用户)

我认为它是什么?

我认为 ionic 将页面保存在缓存上,当新用户签署方法构造函数并且不再调用ngOnInit时......变量保留旧用户数据,并且视图呈现错误信息。

我有点确定这是问题所在,因为并不是每次发生此错误时,有时所有内容都会按其应有的方式呈现,但我不知道该怎么办:/

问题

有人已经遇到这个问题了吗?您采取了什么措施来解决这个问题?

我有办法告诉 ionic 不要将页面保留在缓存中吗?

有没有办法在 router.navigate() 到另一个页面后强制销毁最后的内容?

小智 7

默认情况下,Ionic 不会销毁页面 - 它将它们保留在 DOM 中,以便通过后退/前进按钮启用移动。在普通 Angular 路由中,您可以通过 RouteReuseStrategy 控制它,但如果您\xe2\x80\x99使用 ion-router-outlet,则不能。ion-router-outlet 实现了一个存储导航历史记录的堆栈,并且仅在创建组件后才运行 Ionic 生命周期挂钩。您可以使用navigateRoot() 清除此堆栈,或切换到Angular\xe2\x80\x99s router-outlet 和router。

\n

我认为这是一个重大缺陷,并且没有得到足够的记录。在许多情况下,不希望将渲染的组件无限期地存储在 DOM 中,并且可能会对性能产生重大影响。

\n


小智 6

我使用Ionic 4 Angular 8遇到了同样的问题。我使用{ replaceUrl: true }当用户单击注销时修复了它。例如:

logout() {
    ...
    this.router.navigate(["login"], { replaceUrl: true });
}
Run Code Online (Sandbox Code Playgroud)