2

今日、Angular で ng-click ディレクティブを使用してボタンをクリックするときの問題に対処していました。デスクトップでは明らかに時間の遅延は見られませんでしたが、iPad で Phonegap アプリケーションを実行すると問題が発生しました。お見せしましょう。この遅い動作を引き起こしたコード、同じ症状を持つ2つの例があります:

例 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 に答える