问题标签 [ngondestroy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3246 浏览

angular - Angular 2:找不到 ngOnInit/ngOnDestroy

注意:我发现文章在实现过程中在 typescript 中找不到 OnInit但下面的代码已经在导入OnInit/ OnDestroy

我发现的所有示例(例如,使用路由参数)都表明在类定义中添加implements OnInit/子句,并在订阅以从路由获取参数时包括/方法——代码正在这样做。OnDestroyngOnInitngOnDestroy

但是VS2017子句报错“错误实现OnInit/OnDestroy”,函数报错“Cannot find ngOnInit/ngOnDestroy”。

如果我删除implements子句并注释ngOnInit/ngOnDestroy函数(仅在 的主体中留下代码ngOnInit),则代码有效;它成功地从路由参数中获取参数。

0 投票
1 回答
591 浏览

angular - 在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges

我有一个接受输入的子组件

在子组件中,我通过执行以下操作检测对 customModel 输入的更改:

在我的父组件中,我想在父组件被销毁时通知子组件

当父组件的 ngOnDestroy 中输入 customModel 发生变化时,子组件的 ngOnChanges 不会被调用。为什么会发生这种情况?

我在孩子中有一个音频元素,即使在父母被破坏后仍然可以听到音频。

ngOnChanges 在我更改输入时在其他情况下被调用,但不是通过 ngOnDestroy

0 投票
1 回答
29 浏览

angular - 服务初始化一次但不是第二次

我刚刚在我一直在玩的应用程序中发现了一个错误,这对我来说似乎没有意义。

问题:我在不同的 MatTab 上有两个组件。每个都正确实例化并在选项卡更改之间被破坏。我的 Post 服务正在返回一个 observable 并完美地填充我的数据表。所以就像一个愚蠢的孩子,我进入我的服务并尝试清理代码。从以下位置更改邮政服务后:

这工作正常,但我重复自己,所以我决定清理它 - 将其更改为:

更改代码后,我只得到一个填充的实例。发生这种情况是否有原因?对我来说,这是相同的代码,我知道这里有一些我不理解的东西,但我无法终生找出它是什么。实例化服务的方式是否有我在这里看不到的东西?再次感谢。

如果你也需要,这里是 feed.component。提前抱歉我似乎无法在此处正确发布代码。

0 投票
2 回答
48 浏览

angular - Angular/Typescript - 获取时间戳 OnDestroy

我试图在每次访问页面时获取时间戳,并在用户离开页面时获取另一个时间戳。我得到了 Oninit 的时间,但是“OnDestroy”我得到了与访问页面时相同的确切时间。

0 投票
2 回答
49 浏览

javascript - ngOnDestroy() 可以在条件下触发吗?选择复选框时,即使在网格重新加载后,它也会记住我以前的选择

我有这两个网格。底部是基于顶部的:

下方网格中的每个项目都与从顶部网格中选择的程序名称和工具# 相关。在这张图片中,“删除工具更改”按钮已启用,因为我从下方网格中选择了一个项目。

现在,如果我选择不同的程序名称和工具#(例如:从顶部网格中的 #6 到 1),并从底部网格中选择不同的项目(例如:1#),它会突然禁用“删除工具更改” “ 按钮。

从上层网格中选择不同项目后的两个网格

这是我用于上部网格组件的代码。

这是我的上网格 html:

这是我的较低网格组件的代码:

这是我的下部网格 html 代码:

如何编写函数或触发 ngOnDestroy 使其不再记住先前选择的行。

0 投票
1 回答
1936 浏览

angular - Angular ngOnDestroy

我一直在尝试将网络插件设置为应用程序上的服务,以判断是否有互联网。

在我的示例中,我设置了两个组件:

  1. 具有直接在其中实现的网络侦听器的 HOME 组件和
  2. 订阅 networkService 中的 BehaviourSubject 可观察对象的 TEST 组件

我的问题是当我从一个导航到另一个时试图破坏组件。加载应用程序的组件永远不会被破坏。即使我在 ngOnDestroy() 之上实现了类似 @HostListener('window:beforeunload') 的东西。

我已经在两个组件上实现了 ngOnDestroy 以分别删除侦听器或取消订阅 networkServices 的 observable。

我注意到,如果我在 Home 上刷新应用程序:

  1. 我导航到 TEST 并且 HOME.ngOnDestroy() 没有被调用。
  2. 当我从 TEST 导航回 HOME 时,会调用 TEST.ngOnDestroy()。

上述场景的控制台输出

如果我在 TEST 上刷新应用程序,则会发生相同的行为但相反

  1. 我导航到 HOME 并且 TEST.ngOnDestroy() 没有被调用。
  2. 当我从 HOME 导航回 TEST 时,会调用 TEST.ngOnDestroy()。

我已将项目上传到公共 git 以防万一: https ://github.com/jjgl/ionicNetworkCapacitorTests/

但这里是主要位:

测试

网络服务

不用说我是 Angular 的新手,所以也可以随意指出其他事情,欢迎所有评论。

PS:我已经在 networkService 上实现了 ngOnDestroy,但我没有从 TEST 调用它,因为在第一次调用 TEST.ngOnDestroy 后导航回 TEST 时服务不会重新实例化。

0 投票
0 回答
300 浏览

angular - 如何销毁 Angular 应用程序?

我有一个 Angular 应用程序,它是一个带有路由的简单应用程序。我必须将我的应用程序作为另一个网站的一部分包含在内,该网站在通过 RequireJS 加载所有依赖项后将应用程序加载到模式中。

将应用程序打开为模态可以正常工作。

当模态被解除(并且我们用模态解除节点)时,我想应用程序被破坏了。

但是在模式关闭后,应用程序似乎仍在内存中,如果我再次打开模式,我没有看到应用程序已加载(也没有发现任何错误)。

第一次使用后,我得到一个空白页。

所以我想我必须在模态解雇时强制应用程序销毁。

有什么建议么?

=== 更新 ===

我试图遵循两种不同的方式。

  1. 使用 RequireJS 取消定义

    我收到一条错误消息,但它似乎不起作用

  2. 通过 Ajax 请求包含 main.js

    我没有收到任何错误,但它似乎不起作用

无论如何,我看到 Angular 应用程序似乎仍然有效,我可以阅读 Angular 控制器发送的控制台日志中的消息,但渲染不起作用。

当第二次包含 main.js 时,我阅读了除主构造函数中的消息之外的所有控制台日志消息。

0 投票
2 回答
179 浏览

angular - 移除 observable 动作是订阅被取消订阅

我有一个问题,我认为我可以通过订阅解决:

因为我有 1 秒的间隔并且服务器已关闭(故意),所以我的间隔将在 5 秒内发出 5 个请求,但 foreach 的答案将在 1 秒内出现。

因此,当我发出第一个请求并等待它的回答(这将引发错误)时,已经会发出第二个请求,thirs,依此类推。

此时,如果我离开页面(调用ngOnDestroy),我想从另一个组件更新标题。但是,离开页面后,我会收到上一个组件的所有响应(成功或失败)。我想在离开时取消所有这些。我以为这unsubscribingdata$解决这个问题,但问题仍然存在。

谢谢

0 投票
0 回答
315 浏览

angular - 防止在 ngDestroy 角度导航

如果表单很脏,我想防止用户离开当前页面。虽然这适用于 CanDeactivate 保护,但问题是当我尝试移动到同一父级的另一个子组件时,没有更改路由。这两种情况的唯一共同点是,在这两种情况下,ngOnDestroy() 都会被命中。但是,不幸的是,在 ngOnDestroy 中打开确认对话框(mat-dialog)并不能阻止导航在后台发生。有没有可能的解决方案?

0 投票
1 回答
130 浏览

angular - sciptprocessor 在 Angular 10 中通过更改输入流来增加 CPU 使用率。还有怎么销毁

希望从我在设备访问组件路由上实现的音量计中释放 CPU 资源。navigator.mediaDevices.getUserMedia此音量计组件使用 WebRTC调用获取在父组件(设备访问)中设置的现有流。父组件允许用户切换音频输入设备并让音量表反映音量表中反映的输入音量/增益/反馈。

目前存在一个问题,在设备的多个交换机上,CPU 级别逐渐上升。此外,此设备访问页面是通向视频会议组件的网关。一个常见的场景是让用户回到这个除冰访问页面。当用户返回时,onaudioprocess 仍在运行并增加 CPU 使用率。

以下是代码。我在子组件(体积计)中实现了一个 ngOnDestroy,但它似乎并没有影响仍在运行的进程。当我切换输入音频设备(在订阅中)时,我想杀死脚本处理器并重新启动它。我该怎么做呢?

组件标记:

我曾尝试使用 ViewChild 订阅画布并取消订阅,但运气不佳。任何人都对更有效地运行它的策略有任何见解。订阅drawLoop(并将其提取到服务中)是最好的答案吗?

我知道 WebRTC 推荐 audioWorklets: https ://alvestrand.github.io/audio-worklet/

  • 这是一个草稿,没有被 Safari 采用。从长远来看,这似乎是一个更好的解决方案。