Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

211
Views
¿Cómo oculto un componente Agular en todas las rutas que corresponden a un determinado patrón?

Estoy trabajando en una aplicación de comercio electrónico cuyo front-end está hecho en Angular 13.

La interfaz de usuario tiene una barra lateral que no quiero mostrar en la página de detalles del producto .

Para ello, en app\app.component.ts tengo:

 import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'E-commerce'; constructor(private router: Router) {} ngOnInit() {} /** * Check if the router url contains the specified route * * @param {string} route * @returns * @memberof AppComponent */ hasRoute(route: string) { return this.router.url.includes(route); } }

En app\app.component.html :

 <div class="app-wrapper"> <app-navbar></app-navbar> <div class="container"> <div class="row my-3"> <div *ngIf="!hasRoute('products/show/:id')" class="col-sm-6 col-md-4 col-lg-3"> <app-sidebar class="app-sidebar"></app-sidebar> </div> <div class="col-sm-6 col-md-8 col-lg-9"> <router-outlet></router-outlet> </div> </div> </div> <app-footer class="app-footer"></app-footer> </div>

El problema

Por una razón que no he podido entender, esta solución falla y la barra lateral se muestra en cualquier parte de la aplicación.

¿Qué estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

<div *ngIf="notProductDetails()" class="col-sm-6 col-md-4 col-lg-3"> <app-sidebar class="app-sidebar"></app-sidebar> </div>

HTML ^^^

 constructor() {} public notProductDetails(): void { return !window.location.pathname.startsWith('/products/show/'); }

TS

Simplemente use la ubicación de la ventana para extraer el nombre de la ruta en lugar de inyectar el enrutador; elimine la inyección del constructor. Además, no es necesario pasar un valor prop allí, porque solo tiene una sola cadena que está afirmando.

about 4 years ago · Juan Pablo Isaza Report

0

De esa manera, está ejecutando ese valor solo una vez. Para lograr esto, puede suscribirse a los eventos del enrutador como este:

 public showBar: boolean = true; constructor(private readonly router: Router) { this.router.events .pipe(filter((event) => event instanceof NavigationEnd)) .subscribe(({ urlAfterRedirects }: NavigationEnd) => this.showBar = this.hasRoute(urlAfterRedirects) ); }
 <div *ngIf="showBar" class="col-sm-6 col-md-4 col-lg-3"> <app-sidebar class="app-sidebar"></app-sidebar> </div>

De esta manera, está actualizando el valor de showBar cada vez que finaliza la navegación.

about 4 years ago · Juan Pablo Isaza Report

0

En caso de que alguien pueda encontrarlo útil, aquí están las soluciones finales que he aplicado a este problema:

En app\app.component.ts :

 import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], }) export class AppComponent { title: string = 'E-commerce'; constructor(private router: Router) {} ngOnInit() {} routeIncludesNot(route: string) { return !window.location.pathname.startsWith(route); } }

En app\app.component.html tengo:

 <div class="app-wrapper"> <app-navbar></app-navbar> <div class="container"> <div class="row my-3"> <div *ngIf="routeIncludesNot('/products/show/')" class="col-sm-6 col-md-4 col-lg-3"> <app-sidebar class="app-sidebar"></app-sidebar> </div> <div [ngClass]="routeIncludesNot('/products/show/') ? 'col-sm-6 col-md-8 col-lg-9' : ''"> <router-outlet></router-outlet> </div> </div> </div> <app-footer class="app-footer"></app-footer> </div>

Vea una "demostración en vivo" AQUÍ .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!