2016-09-16 3 views
3

В моем Ионных 1.3.1 приложении Я использую ion-slides компонент для отображения разделов анкеты:slideChangeStart событие не срабатывает, когда я красть

<ion-slides options="vm.options" slider="data.slider"> 
     <ion-slide-page ng-repeat="s in ::vm.sections"> 
      <div class="bar bar-header bar-positive"> 
       <button class="button button-small button-icon icon ion-chevron-left" 
         ng-click="vm.previous()" 
         ng-show="::$index !== 0"></button> 
       <h1 class="title">{{::s.text}}</h1> 
       <button class="button button-small button-icon icon ion-chevron-right" 
         ng-click="vm.next()" 
         ng-show="::($index + 1) < vm.sections.length"></button> 
      </div> 
      <ion-content class="has-header"> 
       <div ng-if="s.include" ng-show="s.show"> 
        <!--My content--> 
       </div> 
      </ion-content> 
     </ion-slide-page> 
    </ion-slides> 

В моем контроллере я слушаю для slideChangeStart:

$scope.$on("$ionicSlides.slideChangeStart", function (event, data) { 
     alert('slideChangeStart'); 
     vm.activeIndex = slider.activeIndex; 
     vm.propertySurvey.CurrentSectionIndex = vm.activeIndex; 

     //include is used on an ng-if so elements are removed from the dom 
     //and the number of watchers is reduced 
     //also, the slider displays the contents of the 
     //previous slide unless they are explicitly hidden 
     vm.sections[slider.previousIndex].include = false; 
     vm.sections[slider.previousIndex].show = false; 

     initialiseQuestions(vm.activeIndex); 
    }); 

Когда я нажимаю на свои предыдущие и следующие кнопки, которые вызывают slider.slidePrev() или slider.slideNext(), срабатывает событие slideChangeStart - и я вижу предупреждение. Но если я сдвигаю страницу с помощью жестов - заголовок изменяется, как я ожидаю, но событие не срабатывает. Я попытался (в любом случае не мое предпочтительное решение) переключая салфетки прочь в моих вариантов без успеха:

vm.options = { 
    noSwiping: true, 
    effect: 'fade' 
} 

UPDATE Я попытался с помощью slideChangeEnd, но это событие не стрелять либо. Таким образом, я переместил весь свой код в один метод gotoSlide(index), который я вызываю из своих методов, previous и pagerClick - так что я не полагаюсь на событие с ионными слайдами. И я добавил ионическую-взмах директиву моей ионно-слайд-страница компоненту, чтобы увидеть, если они будут работать:

<ion-slide-page ng-repeat="s in ::vm.sections" 
       on-swipe-left="vm.next()" 
       on-swipe-right="vm.previous()"> 

Это сделал салфетку работу в Ripple эмулятора (где он не работал вообще, прежде чем), но он по-прежнему не работает ни на одном из моих устройств Android. Опять же, события салфетки, похоже, не срабатывают.

Я использую плагин Пешеходный

+0

Попробуйте добавить свойство onSlideChangeEnd к вашим vm.options. У меня был sucess, определяющий мои события в объекте options – Ladmerc

+0

Пробовал это. Это тоже не стреляет - см. Мое редактирование – Colin

ответ

0

проблема исчезнет, ​​если я удалить опцию effect. Так это работает:

vm.options = { 
    noSwiping: false, 
    speed: 300 
} 

И, поскольку эти значения по умолчанию в любом случае, я в конечном итоге удаление опции объекта в целом.

NB замена «замирание» с «горкой» не работает

Ссылка: http://ionicframework.com/docs/api/directive/ionSlides/

0

У меня была аналогичная проблема, и выше ответ не работает для меня, поэтому я думал, share, что было сделано: В соответствии с Swiper API (который лежит в основе слайдов с ионами) вы можете добавлять обратные вызовы на основе событий непосредственно к виджету.

Следующая работал для меня (при условии, объект scope.slider ...)

//the 'slideChangeStart' event has a slider argument in its callback 
scope.slider.on('slideChangeStart', function(slider) { 
    //do stuff - maybe you want to store the activeIndex 
    scope.indexIReallyCareAbout = slider.activeIndex; 
}); 

Swiper API дает список событий, которые могут названы в «на» обратного вызова функции под заголовком Callbacks