收听角度控制器中的phonegap背景事件



我有一个phonegap应用程序,想知道该应用程序何时使用pause进入后台(http://docs.phonegap.com/en/3.6.0/cordova_events_events.md.html#pause)事件。document.addEventListener("pause",您的回调函数, false);然而,我正在寻找一种方法,使yourCallbackFunction触发$作用域。当当前路由在当前作用域中为/orders时取消,否则忽略。我怎样才能做到这一点?感谢您的帮助。

注意:当我进入应用程序中的此页面时,设备就绪已被激发,因此不需要处理设备就绪。

此处上下文中的代码:

html:

<!doctype html>
  <head>
  </head>
  <body ng-app="myapp">
    <!-- Add your site or application content here -->
    <div ng-view=""></div>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-resource.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-cookies.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-sanitize.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-route.min.js"></script>
    <script src="app/app.js"></script>
</body>
</html>

apps:中的javascript

angular.module('myapp', [ 'ngRoute' ])
  .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
    $routeProvider
      .when('/', { templateUrl: 'login/login.html', controller: 'LoginCtrl' })
      .when('/orders', { templateUrl: 'app/orders/orders.html', controller: 'OrdersCtrl' });
      .otherwise({ redirectTo: '/' });
  }]);
app.controller('OrdersCtrl', [ '$scope','$filter','$timeout', function($scope,$filter,$timeout,) {
  $scope.date = new Date();
  $scope.refresh = function(){
      getOrders(); //Implemented elsewhere
  }
  $scope.cancel = function(){
      cancelRefresh(); //Implemented elsewhere
  }
}]);

OrdersCtrl在作用域$destroy上加载和取消订阅时,您可以订阅暂停事件,这样您就知道当您在正确的控制器中时会触发事件:

app.controller('OrdersCtrl'...) {
    function onPause() {
      cancelRefresh();
    }
    document.addEventListener("pause", onPause, false);
    $scope.$on('$destroy', function () {
        document.removeEventListener("pause", onPause);
    });
});

不过,这只适用于我使用ngRoute而不适用于ui-router的情况。因此,另一种解决方案可以是向模块添加一个run部分,向其注入$location以检查路径,然后使用一个可以取消刷新的服务,或者使用$broadcast:将工作委托给控制器

app.run(function($location, $rootScope, orderService) {        
    document.addEventListener("pause", function() {
        if ($location.path() === '/orders') {
            $rootScope.$broadcast('pauseEvent');
            orderService.cancel();
        }
    }, false);
});

最新更新