【发布时间】:2014-05-24 15:35:16
【问题描述】:
我有一个 MainCtrl 包含历史的 backstack,像这样;
$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();从 devicelistener 调用时,函数的工作方式不同。
【问题讨论】:
-
这段代码的总体目的是什么?用户点击后退按钮是否只是导航到上一页?
-
抱歉,如果不清楚,这正是目的。
-
我知道出了什么问题。 $location.path();由事件侦听器调用时不起作用。使用 ng-click 调用它可以正常工作。