我有一个具有多个 Angular Controller 的Ionic应用程序。 Controller 之一是LoginCtrl,另一个是RegisterCtrl。我遇到的问题是我在Login Ctrl中调用$ emit以使用RegisterCtrl中的滑块打开模态:
模式模板HTML
<!-- A very cut down version of my code -->
<ion-content class="register-wrapper">
<ion-slide-box delegate-handle="registerSlider" show-pager="false">
<ion-slide class="padding">
Slide 1
</ion-slide>
<ion-slide class="padding">
Slide 2
</ion-slide>
<ion-slide class="padding">
Slide 3
</ion-slide>
</ion-slide-box>
</ion-content>
LoginCrtl
$rootScope.$emit("showRegisterPopup", {data:'somedata'});
RegisterCrtl
// This is a cut down version of the code
$ionicModal.fromTemplateUrl('templates/modals/register-form1.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function (modal) {
$scope.modal = modal;
$scope.registerModalSlider = $ionicSlideBoxDelegate.$getByHandle('registerSlider');
$scope.registerModalSlider.enableSlide(false);
});
$rootScope.$on("showRegisterPopup", function(emitEvent, somedata){
if ($scope.registerModalSlider){
$timeout(function({
$scope.registerModalSlider.slide(2);
},200);
}
rc.showRegister();
});
我得到的问题是,当我调用滑块的.slide()函数时,它没有滑动到指定的页面,并且出现以下错误:
Delegate for handle "registerSlider" could not find a corresponding element with delegate-handle="registerSlider"! slide() was not called!
Possible cause: If you are calling slide() immediately, and your element with delegate-handle="registerSlider" is a child of your controller, then your element may not be compiled yet. Put a $timeout around your call to slide() and try again.
如您所见,我已经在HTML中设置了委托(delegate)句柄,并且我已经在超时时间内进行了.slide()调用,但这不能解决问题。
最佳答案
我设法通过使用滑块上的“active-slide”属性来解决此问题。这基本上需要一个整数,您可以将其更新为要查看的幻灯片的任何索引。
鉴于:
<ion-slide-box delegate-handle="registerSlider" show-pager="false" active-slide="currentSlide">
</ion-slide-box>
在 Controller 中:
//Instead of this:
if ($ionicSlideBoxDelegate.$getByHandle('registerSlider')){
$ionicSlideBoxDelegate.$getByHandle('registerSlider').slide(2);
}
// Do this...
$scope.currentStep = 2;