2015-02-27 2 views
1

У меня есть приложение phonegap и вы хотите узнать, когда приложение переходит на задний план, используя pause (http://docs.phonegap.com/en/3.6.0/cordova_events_events.md.html#pause). document.addEventListener("pause",yourCallbackFunction, false); Однако я ищу способ сделать yourCallbackFunction курок $ scope.cancel, когда текущий маршрут /orders в текущей области и игнорировать иначе. Как я могу это достичь? Цените любую помощь.Слушайте случайное событие phonegap в угловом контроллере

Примечание. Устройство уже было уволено к моменту, когда я прихожу на эту страницу в приложении, поэтому не нужно обращаться с устройством.

код в контексте здесь:

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> 

Javascript в app.js:

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

Вы можете подписаться на событие паузы при OrdersCtrl нагрузки и unsubsribe по размаху $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); 
}); 
+0

Спасибо, все равно, чтобы сохранить эти функции вне контроллера или угловые? Удерживая их внутри пары кода, я пытаюсь сохранить код отдельно. – Kiran

Смежные вопросы