【问题标题】:How do I get the target element event of accordion-group on isOpenChange is triggered如何在 isOpenChange 上触发手风琴组的目标元素事件
【发布时间】:2019-10-04 17:07:47
【问题描述】:

当我单击按钮并将打开的手风琴滚动到视图顶部时,我想展开手风琴(可折叠)。

我为此使用 ngx-bootstrap,它有一个“isOpenChange”事件,当任何手风琴展开时触发。在这里,我试图获取展开的手风琴组的 event.target。我正在使用下面的代码来滚动事件。

event.target.scrollIntoView({behavior: 'smooth', block: 'start', inline: 'nearest'});

我尝试从“isOpenChange”传递事件,但它只返回真/假。由于事件始终为真/假,因此我遇到了以下问题。我可以使用点击功能传递它,但在我的情况下,当我点击外部或同一页面另一部分的某个按钮时,手风琴应该打开。

我希望能够跟踪元素的目标事件。

<accordion [closeOthers]="true" [isAnimated]="true">
<div class="listitem" *ngFor="let equipment of equipments">
  <accordion-group #group (isOpenChange)="equipmentOpened(equipment, $event)" [class.active]="equipment.active" [isOpen]="equipment.active">
    <accordion-heading accordion-heading>
      <span class="icon icon-{{ equipment.icon }} smallIcon"></span>
      <div class="arrowdown icon-backward-arrow"></div>
      <div class="accordionText">
          <span>{{ equipment.description }}</span>
          <span class="subtitle">Asset Id:<span class="listanswer">{{equipment.id }}</span></span>
      </div>
    </accordion-heading>
    <div class="information-list" *ngIf="group.isOpen">
      <ul>
        <li class="listtitle">
          Asset type
          <div class="listanswer">{{equipment.type}}</div>
        </li>
        <li class="listtitle" *ngIf="equipment.batteryLevel != null">
          Battery Level Sensor
          <div class="listanswer">{{equipment.getBatteryPercentage()}}%</div>
        </li>
        <li class="listtitle" *ngIf="!isNumber(equipment.getTemperature())">
          Temperature
          <div class="listanswer">{{equipment.getTemperature()}}&#176;C</div>
        </li>
      </ul>
      <ul>
        <li class="listtitle">
          Last Seen (UTC timezone)
          <div class="listanswer">{{equipment.getLastSeenDate() }}</div>
        </li>
        <li class="listtitle">
          Owner
          <div class="listanswer">{{equipment.owner}}</div>
        </li>
        <!-- <li class="listtitle">
          Distance
          <div class="listanswer">{{equipment.owner}} meters</div>
        </li> -->
      </ul>
      <button (click)="showMap()" class="closeAndShowButton">Show on map</button>
    </div>

  </accordion-group>
</div>

【问题讨论】:

  • 你需要传递元素引用stackoverflow.com/questions/46658522/…
  • 请html部分
  • 我没有每个手风琴组的“ID”,因为它是动态的。
  • @YashwanthGurrapu 传递模板参考
  • @JoelJoseph 你能帮我看看你在说什么

标签: angular accordion ngx-bootstrap


【解决方案1】:

根据 ngx-bootstrap 中的代码,

@Output() isOpenChange: EventEmitter<boolean> = new EventEmitter();

isOpenChange 将只返回布尔值。

您可以在手风琴组上添加索引以获取目标,

<div class="listitem" *ngFor="let equipment of equipments;let i=index;">
  <accordion-group #group (isOpenChange)="equipmentOpened(equipment, $event,i)" [class.active]="equipment.active" [isOpen]="equipment.active" id="accordion-group-{{i}}">

获取手风琴ID,

isOpenChange(equipment:any,isOpen:boolean,i:number)
{
console.log("clicked accordion = >"+"accordion-group-"+i);
}

【讨论】:

  • 好吧,我知道这一点,我已经提到我可以使用点击事件来做到这一点,但我的主要挑战是当手风琴也打开而不点击它并且点击时我应该得到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多