Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 离开后不销毁页面_Angular_Typescript_Ionic Framework - Fatal编程技术网

Angular 离开后不销毁页面

Angular 离开后不销毁页面,angular,typescript,ionic-framework,Angular,Typescript,Ionic Framework,由于工作上的一些需要,我开始使用Ionic(TypeScript+Angular),我以前从未为mobile编写过代码,这是我第一次 我遇到了一个我不知道如何解决的问题,让我试着解释一下流程: 流程1 UserA使用其用户/密码登录 UserA在登录后被重定向到配置文件页面 UserA注销 流程2 UserB使用其用户/密码登录 UserB在登录后被重定向到配置文件页面(他会看到UserA配置文件信息) 考虑 我使用@ionic/storage存储会话,但与存储问题无关,我知道这是因为在注销后我

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

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

流程1
  • UserA使用其用户/密码登录
  • UserA在登录后被重定向到配置文件页面
  • UserA注销
  • 流程2
  • UserB使用其用户/密码登录
  • UserB在登录后被重定向到配置文件页面(他会看到UserA配置文件信息)
  • 考虑 我使用@ionic/storage存储会话,但与存储问题无关,我知道这是因为在注销后我尝试等待session.get('user'),它返回未定义,在新登录后,我等待session.get('user'),它显示正确的用户(刚刚连接的用户)

    我想是什么? 我认为爱奥尼亚正在缓存中保存页面,当新用户签署方法构造函数时,ngOnInit不再被调用。。。变量保留在旧用户数据中,视图呈现时使用了错误的信息

    我有点确定这就是问题所在,因为并不是每次出现这个bug时,有时候所有的东西都会呈现出本来应该的样子,但我不知道该怎么办:/

    问题 有人已经有这个问题了?您是如何解决此问题的

    我有没有办法告诉爱奥尼亚不要把页面保存在缓存中


    有一种方法可以强制在router之后销毁最后一个内容。导航()到另一个页面?

    由于页面转换/状态原因,Ionic有时会在DOM中保留太多页面。因此,您可以使用生命周期方法在页面“重新输入”时重置页面的状态。IonViewWillEnter生命周期方法将在用户每次导航到该页面时触发,无论其是否已在DOM中。有关事件的用法,请参见此处:

    默认情况下,Ionic不会销毁页面-它将页面保存在DOM中,以通过后退/前进按钮启用旅行。在普通角度路由中,您可以通过路由使用策略来控制这一点,但如果您使用的是离子路由器插座,则无法控制。ion router outlet实现了一个存储导航历史的堆栈,并且仅在创建组件后运行Ionic lifecycle挂钩。您可以使用navigateRoot()清除此堆栈,或者切换到Angular的路由器出口和路由器


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

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

    logout() {
        ...
        this.router.navigate(["login"], { replaceUrl: true });
    }