AngularJS + Onsen-Ui + поведение Phonegap с медленным кликом

сегодня я столкнулся с проблемой при нажатии кнопки с использованием директивы ng-click в angular, на рабочем столе, очевидно, не было задержки по времени, но при запуске приложения Phonegap на iPad возникает проблема, позвольте мне показать вам код, который вызывал это медленное поведение, у меня есть два примера с одинаковым симптомом:

Пример 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" клики по кнопкам медленные, активное состояние удлиняется.

Есть идеи по этому поводу?

По крайней мере, я знаю, что вызывает замедление, но мне интересно, почему!

Спасибо за вашу помощь


person Community    schedule 16.07.2014    source источник
comment
Вы можете быть на что-то. Интересно, происходит ли замедление из-за запуска цикла $digest при обновлении $scope.orderTotal. Особенно в примере 1, где у вас есть петля. Я делал подобные вещи, разрабатывая с Angular и PhoneGap, но не используя OnsenUI. Моя отзывчивость была в порядке. Поскольку OnsenUI основан на директивах Angular, возможно, во время цикла $digest срабатывает гораздо больше, чем ваше обновление.   -  person TrazeK    schedule 08.08.2014


Ответы (2)


медленное поведение типично для мобильных устройств, поскольку по умолчанию они имеют задержку 300 мс для обнаружения двойного касания. Вы можете обойти это, используя библиотеку fastclick.

person Marcin Mikołajczyk    schedule 16.07.2014
comment
Я думаю, что 300 мс не проблема, удаление части кода, как в примере, касание происходит довольно быстро, я думаю, что-то связано с $scope var, я пытаюсь вычислить, потому что удаляя этот код, касание происходит быстро, без задержки в 300 мс - person ; 17.07.2014
comment
Я использую приложение fastClick для Angular на Android, и мне нужно удерживать палец в течение 2 секунд, чтобы фактически вызвать щелчок. Что я делаю не так? - person sTx; 10.08.2016

Вы нажимаете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);
});
person Ataru    schedule 17.07.2014
comment
Нет-нет, это не проблема с переходами, просто представьте себе этот сценарий, все загружено, даже контроллеры, но на стороне просмотра у меня есть несколько кнопок, которые вызывают функцию, определенную в контроллере, но я должен заметить, что все загружено , если вы видите мои примеры, когда функция щелчка имеет эту логику, кнопки не реагируют, если удалить эту часть быстро, но если вы видите, что это простой код, ничего особенного, но в любом случае это вызывает некоторую задержку нажатия кнопки - person ; 17.07.2014