问题标签 [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 投票
3 回答
195 浏览

angular - 关闭最后一个选项卡后重定向到注销链接

根据要求,当他关闭浏览器上的最后一个选项卡时,我必须注销用户。

行为不稳定。有时它会减少计数器,有时则不会。此外,我必须在这里处理刷新、多个选项卡关闭和浏览器关闭逻辑。

我该如何实施?

0 投票
1 回答
131 浏览

angular - 关闭应用程序时,Ionic 5 是否为服务和主页调用 ngOnDestroy

在我的 Ionic 5 项目中,我需要ngOnDestroy()服务类来清理数据。ngOnDestroy()我的主页上也有。当我从主页执行以下导航到页面 A 并返回主页时ngOnDestroy(),页面 A 正在触发。

问题是当我关闭应用程序时,我期望ngOnDestroy()主页上的所有服务类都会被触发,但这并没有发生。我看到 Ionic 文档中提到了以下内容。

ngOnDestroy 只会在页面“弹出”时触发。

我检查ionViewWillLeave了应用程序关闭时甚至没有在主页上触发。请建议我如何在主页和服务中进行清理活动?

0 投票
0 回答
40 浏览

angular - ViewDestroyedError:尝试使用已破坏的视图:在对 ngOnDestroy 进行单元测试时发生 viewDestroyedError 的检测变化

我正在对 Angular 组件进行单元测试,该组件使用角度材料的 MatTableDataSource。为了使用 mat-table 的分页器,我不得不在 ngAfterViewInit 中添加以下内容。

当我对 ngDestroy 进行单元测试时,就会出现问题。

因此,它返回以下错误,错误:ViewDestroyedError: Attempt to use a destroyed view: detectChanges at viewDestroyedError

我的组件中没有使用任何 ChangeDetectorRef,所以我认为 MatTableDataSource 可能有它,所以我尝试了 this.tableData._renderChangesSubscription.unsubscribe(),但仍然无法解决问题?有没有人遇到过类似的问题,如果有,可以分享一下你的信息吗?

0 投票
0 回答
15 浏览

angular - PrimeNg 选项卡查看选项卡离开事件

我正在使用 PrimeNg 选项卡视图组件。对于每个选项卡,我都有一个组件,其中数据显示在 AgGrid 中。

如果添加/修改了网格中的数据,如何在更改选项卡时显示警报。

0 投票
0 回答
55 浏览

angular - Angular HttpInterceptor ngOnDestroy 生命周期钩子

Angular会调用对象的ngOnDestroy生命周期吗HttpInterceptor

官方文档只提到:

指令、管道或服务实例

但它没有说明拦截器。

0 投票
0 回答
25 浏览

javascript - 当我离开页面并返回 Angular 应用程序时,如何重置我的枚举?

我在我的 Angular 应用程序中有一个奇怪的情况,我正在寻找有关如何解决它的建议。我有两个页面可以在两个页面之间导航。每个页面都是一个组件,每个页面都有一组枚举:

page-1.component.ts

page-2.component.ts

请注意,枚举是在每个组件类之外定义的,并且它们的名称相同。但是,它们不包含相同的枚举集。

我发现如果我从第 1 页导航到第 2 页并返回,枚举会根据我所在的页面重新定义。所以如果我console.log(myEnums)在第 1 页做,它会显示我enum1, enum2, enum3。如果我console.log(myEnums)在第 2 页这样做,它会显示我enumA, enumB, enumC。所以看起来枚举的范围是每个页面,因此在命名它们时没有冲突。

但是,每组枚举似乎都缓存在某处,这样当我离开页面并返回时,它不必为该页面重新创建枚举。我注意到这一点是因为我正在做一些需要在每个页面上动态修改枚举的事情。因此,如果这是第 1 页上的原始枚举集:

...我从后端调用中获得了额外的值,并将它们插入到枚举中,最终结果如下:

我可以这样做是因为 Javascript 中的枚举只是对象:

...我可以像这样添加额外的:

现在到我的问题。在第 1 页将额外的枚举添加到 myEnums 后,我导航到第 2 页(我在该页面上对 myEnums 执行相同的操作)然后返回第 1 页。我发现再次添加额外的枚举后,它会将它们添加到除了我在第一次访问时添加的额外枚举。所以它最终看起来像这样:

(它知道如何动态创建枚举数。)

这告诉我,即使离开页面,枚举也会被缓存。即使页面组件在我离开时被破坏,枚举也不会。因此,当我返回该页面时,我添加的额外枚举只会堆积在第一次添加的枚举之上。我不想在添加额外的枚举之前检查有多少枚举,因为在我们开发项目时枚举可能会经常更改,并且必须维护一个硬编码的数字来跟踪枚举的数量是很麻烦的。

所以我想知道我是否可以在第 1 页的 ngOnDestroy 中做些什么来将枚举重置为原始集合,或者将它们全部销毁,从而在我下次访问第 1 页时强制它从头开始重新创建它们。因为枚举是在页面范围内,我应该能够在不影响其他页面上的枚举的情况下重置或销毁它们。有没有人有什么建议?谢谢。

0 投票
2 回答
59 浏览

angular - Angular / RxJs - 在组件取消订阅()后在服务中调用next()导致ObjectUnsubscribedError

我有一个定义公共的 Angular 服务Subject。稍后在某些情况下,服务将调用.next()此主题。

另外,我有一个 Angular 组件,它在它的方法中.subscribe()对这个 Subject 进行调用,并在它的方法ngOnInit()中调用。.unsubscribe()ngOnDestroy()

虽然服务和组件都还活着,但我的代码工作正常。但是,用户可以在我的应用程序中单击不同的选项卡。这导致我的组件卸载并调用其ngOnDestroy()方法,这意味着 Observable 已取消订阅。

从这一点开始,组件不再存在,但服务仍然存在 - 其他组件仍在使用它。当.next()组件调用后服务调用方法时.unsubscribe(),抛出此错误ObjectUnsubscribedErrorERROR Error: Uncaught (in promise): ObjectUnsubscribedError: object unsubscribed

此外,稍后如果用户返回到包含该组件的选项卡,ngOnInit()则会执行 并且重新订阅此 observable 会再次引发相同的错误。

我做错了什么,我该如何解决这些错误?