首先,我是Angular世界的新手。试图完成一项任务。我非常感谢所有意见。来解决这个问题。
我正在使用“ ngFor”创建多个扩展面板。我只想突出显示或更改用户选择的面板的样式表。其余所有面板应具有默认样式表。当用户单击第二个面板时,应突出显示第二个面板并将第一个面板重置为默认面板。
“ ngFor循环”是一个组件,它与另一组件中的“ mat扩展面板”交互。因此,当用户单击另一个面板时,我很难重置以前突出显示的面板。
我使用了“ css样式-焦点”作为魅力。但是问题是,即使我单击屏幕上的任意位置,css样式也会设置为默认样式。我只希望当用户选择其他面板时才应该重置。
我还尝试查找先前的元素和当前的元素,并根据尝试更改样式的方式对它们进行比较。它正在工作,但是如果用户选择第二个面板,则无法重置。两者都被突出显示。
这是第一个HTML组件:
</div>
<app-cpd-pres-deck-view *ngFor="let pres of allPres; let idx = index;" [pres]="pres" [isExpanded]= "idx==0" ></app-cpd-pres-deck-view>
</div>
这是垫子扩展面板组件html:
<mat-expansion-panel [expanded]="isExpanded" hideToggle="true" style="margin: 5px;" class="prestest" [(expanded)]="expanded">
<!-- <mat-expansion-panel [expanded]="false" (click)="clickIcon()" hideToggle="true" style="margin: 5px;" class="prestest" > -->
<mat-expansion-panel-header (click)="openPresDeck()" [collapsedHeight]="'60px'" [expandedHeight]="'60px'">
<mat-panel-title>
<mat-icon class="arrow">{{expanded ? 'arrow_drop_down' : 'arrow_right' }}</mat-icon>
<div class="col-md-9" >
<label class="name" id="lblName" >{{pres.profileName}}</label>
<!-- <label class="name" id="lblName" >{{pres.profileName}}</label> -->
</div>...
some more content
</mat-panel-description>
</mat-expansion-panel>
加载页面时,它将加载具有默认样式表的所有面板。现在,使用任何面板时,它都应突出显示该面板,如果用户选择另一个面板,则应重置。
答案 0 :(得分:0)
将此类添加到所选标签后,该类会在扩展垫中称为“ mat-expanded”。例如:
.mat-expanded {
background: #f5f5f5;
}
当用户单击另一个面板时,此类将添加到另一个面板中。
您可以基于该类控制突出显示。
答案 1 :(得分:0)
欢迎使用SO和Angular。
我认为您尝试此操作时非常接近;
我也尝试过查找先前的元素和当前的元素并进行比较 他们基于此尝试更改样式。它正在工作,但我没有 如果用户选择第二个面板,则可以重置。两者都越来越 突出显示。
您应该做的是,而不是查找先前的元素;
export class AppCpdPresDeckViewComponent implements OnInit {
isSelected = false;
}
export class FirstComponent implements OnInit {
@ViewChildren(AppCpdPresDeckViewComponent) panels: QueryList<AppCpdPresDeckViewComponent>;
}
selectPanel(selectedPanel: AppCpdPresDeckViewComponent) {
this.panels.forEach(p => p.isSelected = false);
selectedPanel.isSelected = true;
}
在first.component.html
中<app-app-cpd-pres-deck-view #acdw *ngFor="let pres of allPres" [pres]="pres" (click)="selectPanel(acdw)"></app-app-cpd-pres-deck-view>
这是工作中的demo