我有一个具有多个 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;

10-04 14:29
查看更多