0

对于那些不熟悉的人,可以在这里找到 ngIdle 。

这基本上是一种像许多银行在其网站上使用 angular 进行空闲超时的方法。

它工作得很好,但是我目前使用它的方式是在我的控制器中放置一些配置内容。问题是我正在使用多个控制器,并且真的不想在整个项目中复制粘贴这些配置内容。

这是配置的样子:

function closeModals()
    {           
      // Function closes any modals that are currently open (used when coming back from idle)
      if ($scope.warning) {
        $scope.warning.close();
        $scope.warning = null;
      }
      if ($scope.timedout) {
        $scope.timedout.close();
        $scope.timedout = null;
      }
    }

    $scope.$on('IdleStart', function () {   // What happens when the user goes idle (idle time is defined in app.js IdleProvider config)
      closeModals();
      $scope.warning = $modal.open({
        templateUrl: 'views/timeoutModal.html',
        windowClass: 'modal-danger'
      });
    });

    $scope.$on('IdleTimeout', function () { // This is what happens when the user waits passed the warning timer
      logout();
      closeModals();
      Idle.unwatch();
      $scope.$apply();
      alert("You have been signed out due to inactivity.");
    });

    $scope.$on('IdleEnd', function () { // What happens when the user comes back from being idle but before they are timed out
      closeModals();
      $scope.amIdle = false;
    });

基本上,我希望能够简单地告诉我的控制器我想要使用这些配置设置,并且它能够使用它们而无需将它们放入控制器中。

4

1 回答 1

1

你不应该在多个地方都需要这个配置。查看 NgIdle,他们正在从 $rootScope 广播事件。https://github.com/HackedByChinese/ng-idle/blob/develop/angular-idle.js#L193

您需要在不同范围内设置监视的唯一原因是您想为特定事件执行多项操作。

您需要做的就是在单个控制器中注入 $rootScope 并将事件观察器添加到其中。

于 2015-07-16T18:15:09.167 回答