我有一个 MainCtrl ,其中包含历史记录的后退堆栈,如下所示;
$scope.urlHistory = [];
$scope.$on('$routeChangeSuccess', function () {
if ($location.$$absUrl.split('#')[1] !== $scope.urlHistory[$scope.urlHistory.length - 1]) {
$scope.urlHistory.push($location.$$absUrl.split('#')[1]);
}
});
然后,在同一个控制器中,我有一个 GoBack() 函数,我想在按下后退按钮时调用它;
$scope.goBack = function () {
$scope.urlHistory.pop();
$location.path($scope.urlHistory[$scope.urlHistory.length - 1]);
};
这应该有效,因为从我的 index.html 中我用 ng-click="goBack()" 调用它,一切都按预期工作。
我将其用于设备事件,相同的控制器;
function onBackKeyDown() {
alert("back");
$scope.goBack();
}
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
//
function onDeviceReady() {
// Register the event listener
alert("deviceready");
document.addEventListener("backbutton", onBackKeyDown, false);
};
我可以看到警报,但应用程序无法返回。但会发生一些事情,因为如果我按设备后退按钮两次,ng-click="goBack()" 会突然带我回到应用程序的起始页面。我使用 $scope 错误吗?在 Win Phone 和 Android 上体验这一点。使用 Phonegap 构建。
编辑:我真正在这里追求的是为什么我的 $scope.goBack();从设备监听器调用时,函数的工作方式有所不同。