Aquí hay un código de reproducción del problema en StackBlitz, no dude en ajustarlo según sea necesario.

https://stackblitz.com/edit/ionic-yjlfhv?file=app%2FTabsPage.ts

El comportamiento esperado es que OptionPage transmite un evento Modificado y luego TabsPage reacciona y establece un rootPage diferente para la pestaña "Ver". Esto debería reflejarse cuando la pestaña se selecciona mediante programación o por el usuario.

Incluso si el código TabsPage.ts no selecciona programáticamente la pestaña Ver, la pestaña Ver aún requiere un clic explícito del usuario para actualizar.

Como podemos arreglar esto? Gracias.

1
Meryan 30 abr. 2020 a las 17:00

2 respuestas

La mejor respuesta

Para iteración https://stackblitz.com/edit/ionic-shrsj2

En OptionsPage.html

<span *ngFor="let page of pages; index as i" >
   <button ion-button
      (click)="ViewSet(i)">
      Broadcast OptionsChanged to View{{i+1}}
    </button>
</span>

En OptionsPage.ts

  pages = [
    View1Page,
    View2Page
  ];

  constructor(
    public ViewService: ViewService
  ) {
    this.ViewSet(0);
  }

  ViewSet(i) {
    this.ViewService.OptionChanged.next(this.pages[i]);
  }

En TabsPage.html

<ion-tabs>
    <ion-tab [root]="optionPage" tabTitle="Options" tabIcon="settings"></ion-tab>
    <ion-tab [root]="tabPage" [tabTitle]="'View'" tabIcon="information-circle">
  </ion-tab>
</ion-tabs>


optionPage = OptionsPage;
tabPage = ViewPages;

En ViewPages.ts

  constructor(
    public navController: NavController,
    public ViewService: ViewService
  ) {
  }

  ionViewDidEnter() {
    this.ViewService.OptionChanged.subscribe(data => {
      this.navController.setRoot(data);
    })
  }
2
Andran 1 may. 2020 a las 11:57

https://stackblitz.com/edit/ionic-tgcblm

Puedes intentarlo así,

.View2Page

import { Component } from "@angular/core";
import { NavController } from "ionic-angular";
import { View1Page } from "./View1Page";
import { ViewService } from "./ViewService";

@Component({
   selector: "View2Page",
   templateUrl: "View2Page.html"
})

export class View2Page {

constructor(
   public navController: NavController,
   public ViewService: ViewService
) {
}

ionViewDidEnter() {
   this.ViewService.OptionChanged.subscribe(data => {
      if (data === 'View1') {
         this.navController.setRoot(View1Page);
      }
   })
}
}
1
Andran 30 abr. 2020 a las 19:39