AngularJS+;Onsen用户界面&x2B;Phonegap慢速单击行为

AngularJS+;Onsen用户界面&x2B;Phonegap慢速单击行为,angularjs,performance,scope,click,onsen-ui,Angularjs,Performance,Scope,Click,Onsen Ui,今天我正在处理一个问题,在桌面上使用ng click指令点击按钮时,显然没有看到任何时间延迟,但在iPad上运行Phonegap应用程序时,问题出现了,让我向您展示导致这种缓慢行为的代码,我有两个具有相同症状的示例: 例1 $scope.addProductFn = function(index){ var product = $scope.products[index]; $scope.order.unshift(product); /* th

今天我正在处理一个问题,在桌面上使用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;
};
如果我删除了这些行,请按预期单击response work(响应工作),非常快

$scope.addProductFn = function(index){
        var product = $scope.products[index];
        $scope.order.unshift(product);
};
下面是我显示总数的方式

<span class="header">Orden: {{ orderTotal | currency }}</span>
Orden:{{orderTotal | currency}
正如您所看到的,没有复杂的代码,但是当尝试计算范围变量“$scope.orderTotal”时,单击按钮的速度会变慢,活动状态会变长

有什么想法吗

至少我知道是什么导致了这件事,但我想知道为什么


感谢您的帮助

对于移动设备来说,慢速行为是典型的,因为默认情况下,它们有300毫秒的延迟来检测双击。您可以通过使用库来绕过此问题,是否将page()推送到具有自己控制器的页面?首先,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);
});
app.controller('pushPageTargetPageCtrl',函数($scope,$timeout){
//延迟控制器初始化并首先进行页面转换。
$timeout(函数(){
//做事
var总和=0;
对于(变量i=0;i<999999;i++){
总和+=i;
}
}, 500);
});

300ms不是问题所在,我认为,删除部分代码就像示例中的tap非常快,我认为这与我试图计算的$scope var有关,因为删除代码tap非常快,没有300毫秒的延迟我在android上使用fastClick作为Angular应用程序,我必须按住手指2秒钟才能真正触发点击。我做错了什么?不不,这不是转换的问题,想象一下这个场景,所有的东西都被加载了,甚至控制器,但是在视图中我有一些按钮调用控制器中定义的函数,但是我必须指出,所有的东西都被加载了,如果你看到我的例子,当点击函数有这种逻辑时,按钮是无响应的,如果删除该部分的速度很快,但是如果您看到的是简单的代码,则没有什么特别的,但无论如何,这会导致单击按钮的延迟,您可能会看到一些东西。我想知道是不是因为更新
$scope.orderTotal
时运行了$digest循环而导致了速度减慢。特别是在示例1中,您有一个循环。我用Angular和PhoneGap开发了类似的东西,但没有使用OnsenUI。我的反应很好。由于OnsenUI是基于角度指令的,因此在$digest循环中触发的指令可能比您的更新要多得多。