私の Ionic 1.3.1 アプリでは、ion-slides
コンポーネントを使用してアンケートのセクションを表示しています。
<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'
}
更新
使用してみslideChangeEnd
ましたが、そのイベントも発生していません。そのため、イオン スライド イベントに依存しないように、すべてのコードを,およびメソッドgotoSlide(index)
から呼び出す単一のメソッドに移動しました。そして、Ionic on-swipe ディレクティブをion-slide-page コンポーネントに追加して、それらが機能するかどうかを確認しました。next
previous
pagerClick
<ion-slide-page ng-repeat="s in ::vm.sections"
on-swipe-left="vm.next()"
on-swipe-right="vm.previous()">
これにより、Rippleエミュレーターでスワイプが機能しました(以前はまったく機能していませんでした)が、私のAndroidデバイスではまだ機能しません。繰り返しますが、スワイプ イベントは発生していないようです。
Crosswalk プラグインを使用しています