【问题标题】:Angularjs event when tab / browser is closed选项卡/浏览器关闭时的Angularjs事件
【发布时间】:2015-04-23 00:46:30
【问题描述】:

我现在有一个角度应用程序,我希望在用户登录时记录用户,直到他注销/关闭浏览器或导航到另一个站点。

如果用户按下注销按钮,这相当容易,但是当用户关闭浏览器或导航到另一个站点时,就会出现问题。

我的问题是,当用户关闭浏览器/选项卡和/或更改网页时,我如何以角度检测并触发事件?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

来自角度文档:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy

$destroy();

从父作用域中移除当前作用域(及其所有子作用域)。移除意味着对 $digest() 的调用将不再传播到当前作用域及其子作用域。删除还意味着当前范围有资格进行垃圾收集。 $destroy() 通常由诸如 ngRepeat 之类的指令用于管理循环的展开。 就在作用域被销毁之前,会在该作用域上广播一个 $destroy 事件。应用程序代码可以注册一个 $destroy 事件处理程序,这将使它有机会执行任何必要的清理。 请注意,在 AngularJS 中,还有一个 $destroy jQuery 事件,可用于在从 DOM 中删除元素之前清理 DOM 绑定。

另请参阅:fire angularjs event when tab/browser is closed

【讨论】:

    【解决方案2】:

    当有人离开该页面时会调用 onunload 事件

    angular.element(document.getElementById('myDiv')).scope();
    scope.my_function();
    

    更多示例

    <div id="myDiv">
     <!-- some code here -->
    </div>
    
    <script>
    ....
    
    angular.controller('MyController', ['$scope', function($scope) {
       $scope.my_function = function() {
          // Do something
       };
    }]);   // End of controller
    
    angular.element(document.getElementById('myDiv')).scope();
    scope.my_function();
    
    </script>
    

    【讨论】:

    • 我如何访问它?在角度?
    • 一种方法是 - 您可以访问范围并调用范围函数。 var scope = angular.element(document.getElementById('myDiv')).scope()l; scope.my_function();
    • angular 是 javascript,因此请确保您可以通过调用 rootscope 或其他方式从范围外访问该函数:stackoverflow.com/questions/20853142/… 这里有一些示例。
    • @NikhilBaliga 您刚刚提供的代码我似乎看不到关闭时会如何触发?
    • @NikhilBaliga 如何将此添加到我的控制器?我需要从我的控制器调用 HTTP 调用来存储注销时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2015-12-07
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多