我有一个phonegap应用,想知道该应用何时使用pause
(http://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
}
}]);
答案 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);
});