【发布时间】:2023-03-27 07:51:01
【问题描述】:
我正在构建手风琴组件。我想要的行为是一次只能打开一个手风琴(总共三个)。换句话说,当单击当前打开的手风琴之外的任何手风琴时,任何打开的手风琴都应该折叠。
现在,我可以打开/关闭这些手风琴,但我无法弄清楚如何“选择”它们以应用“折叠”类(如果当前未选择)。我的选择输入在第一次点击时是错误的(它在 Augury 中以其他方式显示)。
手风琴组.component.ts
import { AccordionComponent } from './../accordion/accordion.component';
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-accordion-group',
templateUrl: './accordion-group.component.html',
styleUrls: ['./accordion-group.component.css']
})
export class AccordionGroupComponent {
@Input() measures;
selected
select(i){
this.selected = i;
}
}
手风琴组.component.html
<app-accordion
*ngFor="let item of items; let i = index"
[item]="item"
[selected]="i === selected"
(click)="select(i)">
</app-accordion>
accordion.component.ts
import { Component, Input } from "@angular/core";
@Component({
selector: "app-accordion",
templateUrl: "./accordion.component.html",
styleUrls: ["./accordion.component.css"]
})
export class AccordionComponent {
@Input() item;
@Input() index;
@Input() selected //this needs to receive true on selected component on click
expand: string = "";
isOpen = false;
handleExpansion() {
console.log(this.selected) //logs false on first click
this.isOpen = !this.isOpen;
this.isOpen ? (this.expand = "expand") : (this.expand = "collapse");
}
}
accordion.component.html
<div
(click)="handleExpansion()"
class="accordion noHighlight {{expand}}">
</div>
【问题讨论】:
-
AccordionComponent中的点击处理程序将在AccordionGroupComponent中的点击处理程序之前执行,因为事件会冒泡。这是预期的行为。您是否考虑过监听selected属性的更改并删除AccordianComponent中的点击处理程序? -
我该怎么做呢?将点击处理程序移动到 Accordion 组件?如果当前未选择,我将如何与每个手风琴兄弟交流它应该关闭?
标签: angular typescript