簡體   English   中英

如何使用角材料保留選項卡狀態?

[英]How to preserve tab state with angular material?

我正在使用 angular 8 和 angular 材料。 我有四個選項卡,您可以在每個選項卡中進行編輯,但是如果您從編輯返回選項卡,則必須選擇上次選擇的選項卡。

我像這樣嘗試:

export class UIStateService {
  private state: UIState;

  constructor() {}

  setState(state: UIState) {
    this.state = state;
  }

  getState(): UIState {
    return this.state ? this.state : { tabState: 1};
  }
}

export interface UIState {
  tabState: number;
}


並在組件中:

ngOnInit(): void {
   const state = this.uiStateService.getState();
   this.setTabState(state.tabState);

  }


  setTabState(tabId: number) {

  }

  getCurrentTabState(): number {

    return 1;
  }

視圖如下所示:

 <mat-tab-group>
      <mat-tab>
        <ng-template mat-tab-label>
          <mat-icon class="interviews">speaker_notes</mat-icon>
          <span i18n>Interview reports</span>{{ dossierItemsCountString(itemTypes.Interview) }}
        </ng-template>
        <ng-container *ngTemplateOutlet="itemList; context: { itemType: itemTypes.Interview }"></ng-container>
      </mat-tab>
      <mat-tab>
        <ng-template mat-tab-label>
          <mat-icon class="notes">note</mat-icon>
          <span i18n>Notes</span>{{ dossierItemsCountString(itemTypes.Note) }}
        </ng-template>
        <ng-container *ngTemplateOutlet="itemList; context: { itemType: itemTypes.Note }"></ng-container>
      </mat-tab>
      <mat-tab>
        <ng-template mat-tab-label>
          <mat-icon class="goals">grade</mat-icon>
          <span i18n>Goals</span>{{ dossierItemsCountString(itemTypes.Goal) }}
        </ng-template>
        <ng-container *ngTemplateOutlet="itemList; context: { itemType: itemTypes.Goal }"></ng-container>
      </mat-tab>
      <mat-tab>
        <ng-template mat-tab-label>
          <mat-icon class="action-steps">list</mat-icon>
          <span i18n>Action steps</span>{{ dossierItemsCountString(itemTypes.ActionStep) }}
        </ng-template>
        <ng-container *ngTemplateOutlet="itemList; context: { itemType: itemTypes.ActionStep }"></ng-container>
      </mat-tab>
    </mat-tab-group>

那我必須改變什么? 謝謝

可以使用 mat-tab-group 的selectedIndex屬性設置活動選項卡。

首先,您需要將默認 tabState 保存為 0,它指向第一個選項卡。 然后,當用戶更改選項卡時,更新 tabState。

<mat-tab-group [selectedIndex]="selectedTab"
           (selectedIndexChange)="setTabState($event)">
      ...
</mat-tab-group>

現在,在組件中的 ngOnInit 中獲取保存的狀態:

export class YourComponent implements ngOnInit {
    selectedTab: number = 0;

    ngOnInit(): void {
       const state = this.uiStateService.getState();
       if (state) {
           this.selectedTab = state.tabState || 0; // Set to 0 if tabState not present
       }
    }

    setTabState(tabId: number): void {
       this.selectedTab = tabId;
       this.uiStateService.setState({tabState: tabId});
    }
}

希望能幫助到你。

您可以嘗試使用 [selectedIndex]。 這是 mat-tab-group 的屬性。 您可以將選項卡索引保存在一個變量中並將其綁定到 selectedIndex 屬性。 希望這會奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM