Ionic Angular -单击不同路径时隐藏离子选项卡栏组件(产品详细信息页面)

qyyhg6bp  于 2023-02-06  发布在  Ionic
关注(0)|答案(2)|浏览(130)

当我点击一个重定向到产品详细信息页面的产品项目时,我试图隐藏一个ionic选项卡栏。我尝试使用其他生命周期方法,如ngAfterViewInit(), ngAfterViewChecked(),甚至尝试setTimeOut()。目前使用结构指令ngIf(),来隐藏组件,但它隐藏了所有路由,而不是指定的路由。我还尝试有条件地呈现它,但却完全破解了密码。
app.componet.ts:

@Component({
  template: `
    <app-tabbar> *ngIf="showComponent"></app-tabbar>
    <router-outlet></router-outlet>
  `,
})
export class AppComponent {
  showComponent: boolean = false;

  constructor(private router: Router) {
    this.router.events.forEach((event) => {
      if (event instanceof RoutesRecognized) {
        this.showComponent = true;
        console.log('URL', event.url);
        if (event.url.startsWith('/product/')) {
          console.log(' tabbar does show');
          this.showComponent = false;
        }
      }
    });
  }

app.component.html:

<div *ngIf="showComponent" class="showComponent">
    <app-tabbar></app-tabbar>
  </div>

值得一提的是,当分页时,我会得到一个错误,这是我以前从未见过的。看起来好像我试图在DOM访问它之前隐藏标签栏。
错误:

product.resolver.ts:27 ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of undefined (reading 'appendChild')

我想知道这是否与整个导航系统有关。
我的想法是,我们可以在path: 'tab-nav'path: ''对象之间放置一个到外部PDP的路径,而不是仅仅将所有屏幕列为TabnavPage下的子对象。
我还看到一个网站,建议创建一个承诺,立即解决它,并添加一个处理程序与then()将运行在下一个滴答声。但这可能是功能等效的setTimeout(0),所以可能不会有帮助。

sycxhyv7

sycxhyv71#

另一种方法是使用Router来检查用户导航到的确切路线,而不仅仅是检查URL。您可以使用Router.url属性来执行此操作:

@Component({
      template: `
        <app-tabbar *ngIf="showComponent"></app-tabbar>
        <router-outlet></router-outlet>
      `,
    })
    export class AppComponent {
      showComponent: boolean = true;
    
      constructor(private router: Router) {
        this.router.events.subscribe((event) => {
          if (event instanceof NavigationEnd) {
            this.showComponent = !this.router.url.startsWith('/product/');
          }
        });
      }
    }

现在,布尔值默认设置为true,当用户导航到以"/product/".开头的路径时,布尔值将设置为false
此方法将确保选项卡栏仅在您指定的确切路线上隐藏。

e5nszbig

e5nszbig2#

在我的应用程序中也有同样的需求。我使用CSS属性显示和离子生命周期ionViewWillEnter / ionViewWillLeave。

需要隐藏的页面的TS文件

ionViewWillEnter() {

const tabBar = document.getElementById('app-tab-bar');
if (tabBar !== null) {
  tabBar.style.display = 'none';
}

}

 ionViewWillLeave() {

const tabBar = document.getElementById('app-tab-bar');
if (tabBar !== null) {
  tabBar.style.display = 'flex';
}
}

选项卡栏的HTML文件

<ion-tabs >
  <ion-tab-bar slot="bottom" color="primary" id="app-tab-bar">
    // content of your tab bar
  </ion-tab-bar>

</ion-tabs>

相关问题