backbutton事件(cordova)未按预期影响angularjs控制器变量



我试图将cordova.js集成到我的角度控制器中,结果无法预测。

    <div class="side-menu" ng-class="{'show_menu' : show_menu }" ng-swipe-left="show_menu = !show_menu"> // more stuff</div>

初始代码:

   $scope.init =function() {
        document.addEventListener("deviceready", $scope.onDeviceReady, false);
    }
   $scope.onDeviceReady = function() {
       document.addEventListener("backbutton", $scope.onBackKeyDown, false);
    }

工作:

  $scope.onBackKeyDown = function($scope) {
        alert('backbutton pressed');
    }

也在工作

这调用了一个函数(与show_menu无关(,并成功地更改了show_menu 的状态

$scope.onBackKeyDown = function() {
    $scope.filterby('dance');
    $scope.show_menu = !$scope.show_menu;
}

不工作

很简单,这里什么都没发生

$scope.onBackKeyDown = function() {
    $scope.show_menu = !$scope.show_menu;
}

控制器一启动,我就把$scope.show_menu声明为false,所以我不明白为什么它在开始工作之前依赖于一个不相关的函数来调用。

编辑:

我发现它正在工作,但它要等到下面的angularjs事件。例如,菜单什么都没发生,但如果我点击触发了另一个与菜单无关的事件,那么菜单状态就会改变。

您可能想要使用$apply((角度事件和addEventListener是分开的,这就是为什么有时您需要使用"$apply",因为它会更新角度代码。或者,您可能希望使用工厂或服务来跟踪在事件之间传递的变量。另一个选项是,如果您想避免使用apply,请使用"controller as syntax"示例ng controller="AppCtrl as app",然后将变量附加为app.show_menu。

最新更新