Триггер события Angularjs-Accordion на странице

0

Привет, я новичок в angularjs. Я использую аккордеон в angularjs.It используется для отображения списка каналов, которые я хочу отобразить на сайте.

Однако у меня проблема. Проблема в том, что я хочу реализовать аккордеон, когда страница загружается в первый раз, она должна отображаться скрытой, а когда мы дважды нажимаем на dropbox, она должна рушиться. Короче говоря, я хочу реализовать складной аккордеон.

Как бы то ни было, у меня есть некоторые проблемы относительно того же. Ниже приведен код, который используется для реализации аккордеона.

$scope.openTab = function(e, object) {
        if(object.active){
            return false;
        }
        var thisElement = $(e.currentTarget);
        $scope.cleanObject($scope.tabs, 'active', false);
        object.active = true;
        $scope.openThread( object.discussions, object.discussions[0] );

         // Sometimes the tab opens off the screen, so we're adding some automatic scrolling
          // The setTimeout is to make sure we get the position after it been animated (0.2s in CSS)
      setTimeout(function() {
        $('body, window').animate({scrollTop: thisElement.position().top - 50 + 'px'});
       }, 205)
            console.log("This is inside the tab")
        $('#accordion').accordion('activate', false );

    }

$scope.cleanObject = function(arr, param, value) {
        var len = arr.length;
        for(var i = 0; i < len; i++) {
            arr[i][param] = value;
        }
    } 

$scope.openThread = function(thisTabDiscussions, thread) {
        var $loadingIndicator = $('.discussionContents .loadingIndicator');

        // Set all threads as inactive
        $scope.cleanObject( thisTabDiscussions, 'active', false );

        // Activate the currently selected thread
        thread.active = true;
        thread.loading = true;                                   //check for accordion collapse event on click menu
        (function(thread){
            $timeout(function() {
                $scope.commentsExpanded = true;
            }, 250);
        })(thread);

        var indicatorCount = $loadingIndicator.get().length;
        for(var i = 0; i < indicatorCount; i++) {
            var $thisElement = $( $loadingIndicator[i] ),
            childrenCount = $thisElement.children().length;
            if(!childrenCount) {
                loading('show', {element: $thisElement});
            }
        }

        $scope.loadDiscussionThread(thread);

        // Set the commentsExpanded flag properly
        var openTabIndex = $scope.tabs.indexOf(thisTabDiscussions);
        if( openTabIndex != -1 && $scope.tabs[ openTabIndex ].active ) {  // the code is required to display the discussion comments
            $scope.commentsExpanded = true;
        }
        $('#accordion1').accordion({
            collapsible: true,
            autoHeight: false,
            active: false
        });

    }

Я также попытался реализовать ниже с помощью jquery в программе, но он не работает;

 $('#accordion1').accordion({
            collapsible: true,
            autoHeight: false,
            active: false
        });

Я написал следующий код для аккордеона:

 $scope.openNotification = function(selector_id) {
    var parentElement = ( selector_id ? $('#' + selector_id) : $('.discussionConfirmation') ),
    adjustElements = parentElement.children('li').children('.dc_check, .dc_close'),
    totalHeight = parentElement.outerHeight();

    adjustElements.height( totalHeight );
    parentElement.fadeIn().slideDown();
    setTimeout( function() {
        $scope.closeNotification(null, parentElement);
    }, 3000);
  }

  $scope.closeNotification = function(e, element) {
    if(e) {
        e.preventDefault();
        var thisElement = $(e.currentTarget),
        parentElement = thisElement.parent().parent();
    } else {
        parentElement = element;
    }

    parentElement.slideUp().fadeOut();
  }

Пожалуйста, помогите мне с этим. Спасибо большое.

1 ответ

0

Если вы хотите просто свертывающийся эффект, вам не нужно изобретать велосипед. Используйте бутстрап. Это идет хорошо с angularjs и сэкономит вам много времени. Я надеюсь, что this_link поможет вам

ОК. Для HTML вам нужно добавить следующий код (или что-то вроде следующего кода :)):

<div class="panel panel-default">
 <div class="panel-heading" role="tab" id="headingOne">
  <h4 class="panel-title">
    <a data-toggle="collapse" ng-click="yourFunction" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
       Item #1
    </a>
  </h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
  <div class="panel-body" id="body-accordion1">
    body text body text body text
  </div>
</div>

Обратите внимание, что attr aria-extended = "true" сообщает вам, что ваше тело аккордеона будет автоматически расширяться. Далее вам нужно добавить функцию контроллера angularjs, подобную этой (если содержимое аккордеона вы получаете с сервера):

$scope.yourFunction = function(){
  var bodyAccordion = $('#body-accordion1')
  bodyAccordion.append( "<div>Your text or whatever yor want</div>" );
}

и последняя часть - добавьте прослушиватель onclick или добавьте ng-click (угловая директива) в html, как в моем примере. Удачи)

  • 0
    @ james-schermann..Я использую библиотеку начальной загрузки для проекта .. Однако, пожалуйста, помогите мне, как использовать ее в приведенном выше случае
  • 0
    Хорошо, я изменил свой ответ. Если у вас есть вопросы, пожалуйста, задайте их мне)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню