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

时间:2015-02-27 12:27:04

标签: javascript ios angularjs cordova angular-routing

我有一个phonegap应用,想知道该应用何时使用pausehttp://docs.phonegap.com/en/3.6.0/cordova_events_events.md.html#pause)事件转到后台。 document.addEventListener("pause", yourCallbackFunction , false); 但是,当我在当前作用域中当前路由为/orders时,我正在寻找一种方法使 yourCallbackFunction 触发 $ scope.cancel ,否则忽略。我怎样才能做到这一点?感谢任何帮助。

注意:当我在应用程序中访问此页面时,设备就绪已经被触发,因此不需要处理deviceReady。

上下文中的代码:

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>

app.js中的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
  }

}]);

1 个答案:

答案 0 :(得分:1)

您可以在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);
});