ngb-accordion을 ng-bootstrap에 사용하고 있습니다. 헤더를 전환하면 하위 구성 요소가 다시 초기화됩니다. 예를 들어, 헤더를 토글하면 드롭 다운이 재설정됩니다. 패널이 숨겨져있을 때 <div class="card-block"></div>
이 삭제 되었기 때문입니다.ng-bootstrap : 아코디언은 구성 요소를 다시 초기화합니다.
구성 요소가 아코디언에서 "숨겨져있는"경우에도 구성 요소의 상태를 어떻게 유지합니까?
템플릿 파일 :
<ngb-accordion activeIds="side-bar-accordion-1" (panelChange)="beforeChange($event)">
<div [class.hide-card-block]="status">
<ngb-panel id="side-bar-accordion-1" class="foo">
<template ngbPanelTitle>
<div class="title">Axes</div>
</template>
<template ngbPanelContent>
<!--This is the component whose state I want to maintain:-->
<side-bar-axes></side-bar-axes>
</template>
</ngb-panel>
</div>
<ngb-panel id="side-bar-accordion-2">
<template ngbPanelTitle>
<div class="title">Fancy</div>
</template>
<template ngbPanelContent>
blah blah
</template>
</ngb-panel>
<ngb-panel id="side-bar-accordion-3">
<template ngbPanelTitle>
<div class="title">Settings</div>
</template>
<template ngbPanelContent>
blah blah
</template>
</ngb-panel>
</ngb-accordion>
구성 요소 타이프 라이터 파일 :
import { Component, ViewChildren, ViewEncapsulation } from '@angular/core';
import { NgbPanelChangeEvent } from '@ng-bootstrap/ng-bootstrap';
import { FieldChooseFiltersComponent } from '../field-choose-filters/field-choose-filters.component';
@Component({
moduleId: module.id,
selector: 'side-bar',
templateUrl: 'side-bar.component.html',
styleUrls: ['side-bar.component.css'],
encapsulation: ViewEncapsulation.None
})
export class SideBarComponent {
hideNum: number = 1;
status: boolean = false;
toggleStatus() {
this.status = !this.status;
}
public beforeChange($event: NgbPanelChangeEvent) {
if ($event.panelId === '1' && $event.nextState === false) {
$event.preventDefault();
}
if ($event.panelId === '2' && $event.nextState === false) {
$event.preventDefault();
}
if ($event.panelId === '3' && $event.nextState === false) {
$event.preventDefault();
}
};
}
그래, 이제는 대부분의 프로젝트에서 잘 작동합니다. 그러나 패널 내용을 파괴하지 못하도록하는 옵션이 있다면 정말 좋을 것입니다! 감사합니다 – goodoldneon777
우리는 패널 내용이 파괴되지 않도록해야합니다. 패널의 콘텐츠를 파괴하지 않는 옵션을 제공하십시오. – kotpal