我已经注册了我的控制器内的硬件后退按钮事件registerBackButtonAction
和使用$destroy
事件注销事件。但是当我导航到不同的页面(状态)时,事件没有被调用。我错过了什么?
.controller('HomeCtrl', function($scope, $ionicPlatform, $location, $rootScope, $http) {
// Register hardware back button
var deregister = $ionicPlatform.registerBackButtonAction(function (event) {
navigator.app.exitApp();
return;
}, 100);
console.log('scope on');
$scope.$on('$destroy', function() {
console.log('destroy called');
deregister();
})
})
在控制台中我看不到destroy called
。请帮我解决这个问题。
更新: 在浏览器中,当我从家庭导航到登录时,Home中的元素仍然存在于浏览器中。我想这就是为什么摧毁不被调用的原因。所以问题是我应该手动触发事件,还是应该将主页实际销毁,当我移动到登录?
这里是我的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet">
<link href="css/ionic.app.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- Push notification -->
<script src="js/PushNotification.js"></script>
<!-- Geo location -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3&sensor=false&language=en"></script>
<!-- app js -->
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
</head>
<body ng-app="starter" ng-controller="AppCtrl">
<ion-nav-view></ion-nav-view>
</body>
</html>
页在app.js通过模板加载状态的一部分:
.state('app.login', {
url: "/login",
views: {
'menuContent': {
templateUrl: "templates/login.html",
controller: 'LoginCtrl'
}
}
})
.state('app.home', {
url: "/home",
views: {
'menuContent': {
templateUrl: "templates/home.html",
controller: 'HomeCtrl'
}
}
})
能否请您告诉我们您的HTML。也许导航$ scope不会被销毁,因为范围所属的元素不会被删除。 – lujcon 2015-02-12 08:39:52
这看起来完全正确,但是有一种情况你必须自己触发destoy事件,也就是说,如果你在transcluded元素中有控制器指令。是这样吗? – jornare 2015-02-12 08:40:20