AngularJS + Onsen-Ui + Phonegap慢速点击行为

时间:2014-07-16 20:24:23

标签: angularjs performance scope click onsen-ui

今天我正在处理一个问题,当使用ng-click指令单击一个按钮时,在桌面上显然没有看到任何时间延迟,但是当在iPad上运行Phonegap应用程序时问题就出来了,让我告诉你导致这种缓慢行为的代码,我有两个具有相同症状的例子:

示例1

$scope.addProductFn = function(index){
        var product = $scope.products[index];
        $scope.order.unshift(product);

        /* the code below make the click slow */
        $scope.orderTotal = 0;
        angular.forEach($scope.order, function(value, key) {
           $scope.orderTotal += value.price;
        });
};

示例2

$scope.addProductFn = function(index){
        var product = $scope.products[index];
        $scope.order.unshift(product);

        /* the code below make the click slow */
        $scope.orderTotal += product.price;
};

如果我删除这些行,请按预期单击响应工作,非常快

$scope.addProductFn = function(index){
        var product = $scope.products[index];
        $scope.order.unshift(product);
};

这就是我如何显示总数

<span class="header">Orden: {{ orderTotal | currency }}</span>

如您所见,没有复杂的代码,但在尝试计算范围var“$ scope.orderTotal”时,按钮上的点击速度很慢,活动状态会变长。

有关于此的任何想法吗?

至少我知道是什么导致这个慢的东西,但我想知道为什么!

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

移动设备的典型行为很慢,因为默认情况下它们有300毫秒的延迟来检测双击。您可以使用fastclick

来绕过此问题

答案 1 :(得分:0)

你是否将pushPage()推送到拥有自己的控制器的页面?首先,Onsen UI pushPage初始化目标页面的控制器,然后执行传输。因此,如果您在目标页面中编写重逻辑,那么您的转换将会延迟。如果要延迟控制器的初始化,请使用$ timeout来延迟。

app.controller('pushPageTargetPageCtrl', function($scope, $timeout){
    //Delay Controller initialization and do page transition firstly.
    $timeout(function(){
        //Do Stuff
        var sum = 0;
        for(var i = 0; i < 999999; i++) {
            sum += i;
        }
    }, 500);
});