当标签页或浏览器关闭时触发AngularJS事件

9

我希望在Angularjs控制器中运行JS代码。

我有这个:

$scope.$on('$destroy', function () {
            alert('page1');
        });

当我从使用该控制器的页面导航时,它能够正常工作,但当我关闭选项卡/浏览器时,它就无法工作了。

我需要使用其他代码在选项卡/浏览器关闭时触发JS代码吗?

1个回答

9

来自Angular文档:

$destroy();

从父级作用域中移除当前作用域(和它的所有子作用域)。移除意味着对 $digest() 函数的调用将不会再传递到当前作用域或其子作用域。此外,移除还意味着当前作用域可以进行垃圾回收。

$destroy() 通常由指令(例如ngRepeat)用于管理循环的展开。

在作用域销毁之前,该作用域上会广播一个 $destroy 事件。应用程序代码可以注册 $destroy 事件处理程序,以便有机会执行任何必要的清理工作。

请注意,在AngularJS中,也有一个 $destroy jQuery 事件,它可以用于在元素从DOM中删除之前清除DOM绑定。

这仅处理作用域本身被销毁的情况,但当选项卡/浏览器关闭时,似乎并不会发生这种情况。

您需要使用 onunload 和 onbeforeunload 事件的低级方法来处理此情况,以下是另一篇您可能会发现有用的文章:

javascript detect browser close tab/close browser


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接