區分墊手風琴

我有一個angular材料的墊子手風琴組件的包裝。當用戶點擊特定的手風琴時,我試圖區分不同的手風琴。

這是我的代碼

Wrapper

墊子手風琴HTML

<mat-accordion>
    <mat-expansion-panel (opened)="data.panelOpenState === true" (closed)="data.panelOpenState === false" [expanded]="data.expanded">
        <mat-expansion-panel-header (click)="stateValue()">
            <mat-panel-title>
                {{ data?.title }}
            </mat-panel-title>
        </mat-expansion-panel-header>
        <ng-content></ng-content>
    </mat-expansion-panel>
</mat-accordion>

墊手風琴TS

import { Component, Input, OnInit } from '@angular/core';
import { SidePanelAccordianData } from './side-panel-accordian.model';
import { SidePanelAccordianService } from './side-panel-accordian.service';

@Component({
  selector: 'app-side-panel-accordian',
  templateUrl: './side-panel-accordian.component.html',
  styleUrls: ['./side-panel-accordian.component.scss']
})
export class SidePanelAccordianComponent implements OnInit {
  @Input() data: SidePanelAccordianData;
  panelOpenState;

  constructor(private accordianStateService: SidePanelAccordianService) { }

  ngOnInit(): void {
  }

  stateValue() {
    this.data.panelOpenState = !this.data.panelOpenState;
    this.accordianStateService.setOpenState(this.data.panelOpenState);
  }

}

墊子手風琴服務

import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class SidePanelAccordianService {
  private _openStateBehaviorSubject = new BehaviorSubject(false);
  public openState$ = this._openStateBehaviorSubject.asObservable();

  public setOpenState(value: boolean) {
    this._openStateBehaviorSubject.next(value);
  }
}

墊子手風琴模型

export class SidePanelAccordianData {
  public title: string = '';
  public panelOpenState: boolean;
  public expanded: boolean;


  constructor(args) {
    this.title = args.title;
    this.panelOpenState = args.panelOpenState;
    this.expanded = args.expanded;
  }
}

我使用包裝器的組件

HTML

<app-side-panel-accordian [data]="{title:'Title', panelOpenState: panelOpenState, expanded: firstDriverExpanded}">
    <div class="inner-row-data">
      <form-input [formStatus]="formStatus" [parentFormGroup]="setupForm" [data]="{
        formControlName: 'firstDriverName',
        name: 'firstDriverName',
      }" (onBlur)="setFirstDriverDetails('name')">
      </form-input>
    </div>
</app-side-panel-accordian>

<app-side-panel-accordian [data]="{title:'Title', panelOpenState: panelOpenState, expanded: secondDriverExpanded}">
    <div class="inner-row-data">
      <form-input [formStatus]="formStatus" [parentFormGroup]="setupForm" [data]="{
        formControlName: 'secondDriverName',
        name: 'secondDriverName',
      }" (onBlur)="setSecondDriverDetails('name')">
      </form-input>
    </div>
</app-side-panel-accordian>

TS

this.accordianStateService.openState$.subscribe(data =>{
  this.accordianState = data;
  if(!this.accordianState) {
    this.firstDriverExpanded = false;
    this.secondDriverExpanded = false;
  }
});

因此,正如你在上面我使用墊子手風琴包裝的組件中看到的那樣,我可以有多個手風琴,所以我的問題是,當點擊更新this.accordianStateService.openState$值時,我將如何區分手風琴?

我需要區分的原因是,我有關于某個手風琴何時打開或關閉的規則。

? 最佳回答:

更新openState$值時,要區分手風琴,可以按如下方式修改代碼:

  1. 更新SidePanelAccordianData模型以包含每個手風琴的標識符。例如:
export class SidePanelAccordianData {
  public id: string;
  public title: string = '';
  public panelOpenState: boolean;
  public expanded: boolean;

  constructor(args) {
    this.id = args.id;
    this.title = args.title;
    this.panelOpenState = args.panelOpenState;
    this.expanded = args.expanded;
  }
}
  1. 修改SidePanelAccordianComponent以在狀態更改的同時發出手風琴的標識符。更新stateValue()方法如下:
stateValue() {
  this.data.panelOpenState = !this.data.panelOpenState;
  this.accordianStateService.setOpenState({ id: this.data.id, state: this.data.panelOpenState });
}
  1. 更新SidePanelAccordianService以在狀態更改的同時發出手風琴的標識符。按如下方式更新setOpenState()方法:
public setOpenState(data: { id: string, state: boolean }) {
  this._openStateBehaviorSubject.next(data);
}
  1. 在使用包裝器的組件中,訂閱openState$并根據其標識符區分手風琴:
this.accordianStateService.openState$.subscribe(data => {
  const accordionId = data.id;
  const accordionState = data.state;

  if (accordionId === 'firstAccordionId') {
    // Handle state change for the first accordion
    this.firstDriverExpanded = accordionState;
  } else if (accordionId === 'secondAccordionId') {
    // Handle state change for the second accordion
    this.secondDriverExpanded = accordionState;
  }
});

請確保將'firstAccordionId''secondAccordionId'替換為手風琴的實際標識符。

使用這種方法,當openState$值更新時,您可以根據手風琴的標識符來區分手風琴,從而允許您分別處理每個手風琴的狀態更改。

主站蜘蛛池模板: 在线观看精品一区| 国产一区二区三区在线免费| 欧美日韩精品一区二区在线观看| 亚洲毛片αv无线播放一区 | 一区二区三区电影在线观看| 国产伦精品一区二区三区| 国产av天堂一区二区三区| 国产成人一区二区三区| 精品福利一区二区三区| 日本国产一区二区三区在线观看| 卡通动漫中文字幕第一区| 久久国产精品一区二区| 国产成人一区二区三区高清| 亚洲综合一区二区精品导航| 天堂一区二区三区在线观看| 在线成人综合色一区| 鲁丝丝国产一区二区| 久久se精品一区二区影院| 亚洲色大成网站www永久一区| 亚洲免费一区二区| 亚洲AV无码一区东京热| 精品国产一区二区三区av片| 国产精品第一区第27页| 亚洲乱码一区二区三区在线观看| 伊人无码精品久久一区二区| 亚洲AV日韩精品一区二区三区| 国产一区二区三区乱码| 亚洲无码一区二区三区| 精品少妇一区二区三区视频| 午夜视频在线观看一区二区| 日韩av片无码一区二区不卡电影| 一区二区三区四区精品| 99精品国产一区二区三区2021| 麻豆国产在线不卡一区二区| 99久久综合狠狠综合久久一区| 一区二区手机视频| 欧美日本精品一区二区三区| 污污内射在线观看一区二区少妇| 成人国产精品一区二区网站| 中文乱码人妻系列一区二区 | 国产精品一区二区香蕉|