2

今天我在使用 ng-click 指令在 Angular 中单击按钮时遇到了一个问题,在桌面上显然没有看到任何时间延迟,但是当在 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" 时,按钮的点击速度很慢,活动状态会变长。

有什么想法吗?

至少我知道是什么导致了缓慢的事情,但我想知道为什么!

谢谢你的帮助

4

2 回答 2

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);
});
于 2014-07-17T03:21:45.057 回答
0

缓慢的行为对于移动设备来说是典型的,因为它们默认有 300 毫秒的延迟来检测双击。您可以使用fastclick库绕过此问题

于 2014-07-16T20:35:36.460 回答