Ionic Modal Slider проблема: не удалось найти соответствующий элемент с делегатом-дескриптором = on $ emit

У меня есть ионное приложение с несколькими угловыми контроллерами. Один из контроллеров - LoginCtrl, а другой - RegisterCtrl. Проблема, связанная с тем, что я вызываю $ emit внутри Login Ctrl, чтобы открыть модальный с ползунком из 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, и у меня уже есть вызов .slide () в течение таймаута, и это не устранило проблему.

javascript,angularjs,cordova,ionic-framework,

4

Ответов: 2


2 принят

Мне удалось решить эту проблему, используя атрибут «активный слайд» на слайдере. Это в основном принимает целое число, которое вы обновляете до любого индекса слайда, который хотите увидеть.

Ввиду:

<ion-slide-box delegate-handle="registerSlider" show-pager="false" active-slide="currentSlide">
</ion-slide-box>

В контроллере:

//Instead of this:
if ($ionicSlideBoxDelegate.$getByHandle('registerSlider')){
    $ionicSlideBoxDelegate.$getByHandle('registerSlider').slide(2);
}

// Do this...
$scope.currentStep = 2;

0

Проблема решается таким образом в следующих проблемах github

Итак, что сделал член, он добавил атрибут delegateHandle в область действия для возможности интерполирования.

Вы можете использовать универсальную директиву, используемую в следующей демонстрации, и применить к ней следующие изменения

Like this:

scope: {
        //
        delegateHandle: '@'
      }

Затем, изменив следующую строку в коде

`$scope.registerModalSlider = $ionicSlideBoxDelegate.$getByHandle('registerSlider',$attr.delegateHandle);

$scope.registerModalSlider = $ionicSlideBoxDelegate.$getByHandle('registerSlider',$scope.delegateHandle);

Итак, теперь delegates will be interpolatedвы можете также обращаться к дескрипторам правильно.

также, как предложено @mikesurowiec, вы можете добавить следующую директиву для использованияrandom generated delegate handle

angular.module('app').directive('randomDelegateHandle', [function () {
  return {
    priority: 1000,
    restrict: 'A',
    compile: function compile(tElement, tAttrs, transclude) {
        tAttrs.$set('delegateHandle', Math.random().toString(36).substring(7));
        return function postLink(scope, iElement, iAttrs, controller) {}
    }
};

}]);

или вы также можете следить за другим решением, упомянутым в проблемах GitHub.

Надеюсь, это поможет немного.

Полная атрибуция относится к вопросам github и упомянутым выше авторам

JavaScript, angularjs, Cordova, ионно-рамки,
Похожие вопросы