想象一下,我有一个控制器来处理例如视图更改:
function Controller($scope){
var viewModel = this;
viewModel.goBack= function(){
viewModel.visible = visibleLinks.pop(); //get last visible link
viewModel.swipeDirection = 'left';// for view change animation
}
}
但我不仅要处理它,例如使用内部的 HTML 按钮<body>
,还要使用设备上的后退按钮。所以我必须为deviceready
事件添加事件侦听器,并且还要显式调用$scope.$apply()
,以便在 AngularJS 上下文之外调用它,如下所示:
document.addEventListener("deviceready", function(){
document.addEventListener("backbutton", function(){
viewModel.goBack();
$scope.$apply();
}, false);
}, false);
}
但我也想遵循(相对:))新controllerAs
语法,因为现在推荐使用这种方法,例如 Todd Motto:适用于团队的 Opinionated AngularJS 样式指南,它允许在使用或不使用$scope
某些东西时从控制器中删除。但是我不能这样做,如果用户单击设备后退按钮时我必须调用,因为我的上下文不是 Angular 上下文。我考虑过创建一个可以作为cordova的包装外观并注入到该服务中,但正如我在这里所读到的:Injecting $scope into an angular service function()这是不可能的。我看到了这个:Angular JS & Phonegap back button event和接受的解决方案还包含这使得$emit
$on
$apply()
Service
$scope
$apply()
$scope
不可移动。任何人都知道在 Angular 控制器之外删除 Cordova 特定事件的解决方案,以便$scope
在不需要明确需要时从控制器中删除?先感谢您。