【问题标题】:rootScope functions not being called when using ngIdle使用 ngIdle 时未调用 rootScope 函数
【发布时间】:2015-05-28 16:24:34
【问题描述】:

我正在使用ngIdle 库,正如documentation 所述,您可以调用某些方法来检查用户不活动,我已将它们放在根范围内。

app.run(function($rootScope) {
    $rootScope.$on('IdleTimeout', function() {
        alert('you will be logged out');
    });

    $rootScope.$on('IdleStart', function () {
        alert('test');
    });
});

这些函数永远不会被调用,我认为这可能与$rootscope 而不是 ngidle 库有关。

控制台没有任何错误,并且正确包含了ngidle库。有什么想法吗?

【问题讨论】:

  • 你能显示更多代码吗(比如你在哪里配置空闲)?看起来他们在我假设启动手表的运行块中运行 Idle.watch() 。然后他们将 Idle 注入控制器并在那里侦听事件,而不是在运行块中。他们还使用 IdleProvider 在配置块中配置间隔
  • 也许... ngidle 库没有包含或配置正确。向我们展示一个完整的示例。

标签: angularjs rootscope ng-idle


【解决方案1】:

对我来说,ng-idle 使用 $rootScope 可以正常工作。但是我浪费了一些时间等待事件触发,直到我认识到配置需要 而不是毫秒;)

app.config(function(IdleProvider) {
    // configure Idle settings
    IdleProvider.idle(5); // in seconds!
    IdleProvider.timeout(5); // in seconds!
});

【讨论】:

    【解决方案2】:

    我也花了一些时间来解决这个问题;根本没有任何事件发生。原来你需要打电话给Idle.watch() 才能开始计时。

    这没有很好的记录;文档不完整,我看到的例子都没有。一切看起来就像您拥有的代码,所以直到我在Getting Started section on the library's GitHub page 中看到它之前我无法弄清楚出了什么问题。虽然没有明确提及,但您必须仔细观察。

    .run(function(Idle){
        // start watching when the app runs. also starts the Keepalive service by default.
        Idle.watch();
    });
    

    然后第二个问题:一旦您自动退出一次,如果您再次登录而不重新加载应用程序,它将不再为您的会话计时。您需要从您的登录方法再次调用Idle.watch()reset the timers and start again

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多