为自定义指令(ngIdle)实现配置的更好方法?

时间:2015-07-16 15:55:08

标签: angularjs ng-idle

对于那些不熟悉的人,可以找到ngIdle here

这基本上是一种像许多银行在其网站上使用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;
    });

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

1 个答案:

答案 0 :(得分:1)

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

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

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