繁体   English   中英

backbutton事件(cordova)不会像预期的那样影响angularjs控制器变量

[英]backbutton event (cordova) not affecting angularjs controller variables as expected

通过尝试将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语法”示例ng-controller =“ AppCtrl as app”,然后将变量附加为app.show_menu。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM