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

286
Views
Enrutador angular: ¿isActive () debe identificar la ruta principal, cuando también está abierta una ruta secundaria?

Me doy cuenta de que router.isActive devuelve false cada vez que se abre una ruta secundaria.

¿Es router.isActive adecuado para verificar '¿estoy en la ruta (x)?' (p. ej.: página de pagos), independientemente de los estados hash, los parámetros de consulta y las rutas secundarias .

¿Debería ser router.isActive el servicio/llamada adecuado para deducir esto? O está destinado a algo más simple. ¿Hay alguna alternativa? ¿Debería escribir mi propio servicio?

P.ej:

  • Cuando está en /second , router.isActive('second', true) === verdadero
    • (bueno)
  • Cuando está en second(modal:my-modal) , router.isActive('second', true) === false
    • El problema: esta función ya no es útil para determinar si estoy en la segunda página
  • Cuando está en /second , router.isActive('', false) === true. (las coincidencias no exactas devuelven estados padre/hijo verdaderos

Creé una prueba de concepto de plnkr para facilitar las pruebas:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Echando un vistazo a la fuente aquí:

https://github.com/angular/angular/blob/master/packages/router/src/router.ts#L493

Entonces, especifica un urlTree o una cadena, y si es necesaria una coincidencia exacta.

Echemos un vistazo a lo que hace después de eso.

return containsTree(this.currentUrlTree, urlTree, exact);

Así que echemos un vistazo a containsTree .

https://github.com/angular/angular/blob/master/packages/router/src/url_tree.ts#L16

Parece que hace una comparación exacta con un contiene contra el árbol dependiendo del valor de exact .

Un poco más de investigación nos lleva aquí:

 export function shallowEqual(a: {[x: string]: any}, b: {[x: string]: any}): boolean { const k1 = Object.keys(a); const k2 = Object.keys(b); if (k1.length != k2.length) { return false; } let key: string; for (let i = 0; i < k1.length; i++) { key = k1[i]; if (a[key] !== b[key]) { return false; } } return true; }

Así que parece que las comparaciones de urlTree se realizan utilizando un algoritmo de comparación superficial 'genérico' para determinar la exactitud. Eso me hace pensar que el método isActive() actual no es lo suficientemente robusto (o fue diseñado intencionalmente de esa manera) para tomar determinaciones en el nivel de granularidad que necesita.

No estoy seguro de si hay una mejor manera (aparte de tal vez analizarlo usted mismo), o si esto es intencional para el método isActive() . Supongo que el método isActive() (cuando se usa la exactitud) probablemente se escribió de esta manera porque el término exact implica que incluso tener la ruta secundaria no produce una coincidencia exacta.

Probablemente valga la pena discutirlo con los chicos de Angular para ver si hay alguna forma de enganchar esa información.

over 4 years ago · Santiago Trujillo 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!