Привет, я новичок в 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();
}
Пожалуйста, помогите мне с этим. Спасибо большое.
Если вы хотите просто свертывающийся эффект, вам не нужно изобретать велосипед. Используйте бутстрап. Это идет хорошо с 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, как в моем примере. Удачи)