我有一个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);
});