【发布时间】:2015-11-28 11:12:50
【问题描述】:
假设我有一个控制器来处理例如视图更改:
function Controller($scope){
var viewModel = this;
viewModel.goBack= function(){
viewModel.visible = visibleLinks.pop(); //get last visible link
viewModel.swipeDirection = 'left';// for view change animation
}
}
但我不仅想处理它,例如使用<body> 中的 HTML 按钮,还想使用设备上的后退按钮。所以我必须为deviceready 事件添加事件侦听器,并显式调用$scope.$apply(),以便在AngularJS 上下文之外调用它,如下所示:
document.addEventListener("deviceready", function(){
document.addEventListener("backbutton", function(){
viewModel.goBack();
$scope.$apply();
}, false);
}, false);
}
但我也想关注(相对 :))新的controllerAssyntax,因为现在推荐这个,例如托德座右铭:Opinionated AngularJS styleguide for teams,它允许在不使用 $emit 或 $on 之类的东西时从控制器中删除 $scope。但是我做不到,如果我必须调用$apply(),因为当用户单击设备后退按钮时,我的上下文不是 Angular 上下文。我考虑过创建一个Service,它可以作为cordova 的包装外观,并将$scope 注入此服务,但正如我在这里读到的:Injecting $scope into an angular service function() 这是不可能的。我看到了这个:Angular JS & Phonegap back button event 并且接受的解决方案还包含 $apply() 这使得 $scope 无法删除。任何人都知道在 Angular 控制器之外删除 Cordova 特定事件的解决方案,以便在不需要明确需要时从控制器中删除 $scope?提前谢谢你。
【问题讨论】:
标签: angularjs cordova angularjs-scope angularjs-controller angularjs-controlleras