【问题标题】:Typescript - stop the destruction of a component打字稿 - 停止组件的破坏
【发布时间】:2018-11-15 01:30:39
【问题描述】:

我有一个带有 2 个主要组件的 Angular 应用程序(我们称它们为 comp A 和 comp B)。在任何给定时间,都会有随机数量的 As 和 B 被初始化。 每个组件都有自己的“数据”变量,他在初始化后获得。

我想实现一种检查方式,在销毁组件时,“数据”是否已从其初始值更改。如果有,我想通知用户并给他 2 个选项:离开页面而不保存或停留在页面上。

作为解决方案,我制作了初始“数据”的副本,并计划在组件销毁时检查数据是否已更改,最终停止组件的销毁。

问题是:有没有办法阻止组件的销毁?

我知道我可以选择使用 canDeactivate 保护。我不能真正使用它,因为组件可能没有从路由初始化。

【问题讨论】:

  • 否,但该解决方案无论如何都行不通。您可以监听beforeunload 事件然后发起检查。
  • 关闭页面时触发beforeunload。我需要在卸载组件时触发的东西。有没有办法将beforeunload分配给组件?(据我所知,window.beforeunload需要来自我的组件的回调)
  • 组件的破坏是某事的结果。你想对那个事件做出反应,不管它是什么。

标签: javascript angular typescript destroy


【解决方案1】:

component-before destroy 是对 angular 的提议添加。 https://github.com/angular/angular/issues/20713

附加的是使用元编程和异步/等待的解决方法。

【讨论】:

    【解决方案2】:

    您可以在 Angular 应用程序中使用 Route guards 来保护 Angular 路由。

    canDeactive 每次尝试更改角度路由时都会调用路由守卫,并在返回 false 时阻止路由更改。

    您可以按照本文创建Route guards

    Can Activate and Can Activate Child Route Guard

    Can Deactivate Route Guard

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2019-02-06
      • 2019-07-28
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多