Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

212
Visualizações
Cómo controlar la plantilla SVG (eventos de clic) en Angular

En un proyecto de Angular, tengo un mapa SVG de un país, con todas sus regiones, y estoy tratando de poner este mapa SVG como plantilla de un componente.

Así que en el archivo SVG tengo cada región representada como <path> o <polygon , en total más de 70 regiones. Y uno de los requisitos es resaltar cada región en la que se hizo clic en un color determinado.

¿Hay alguna manera de manejar el evento de clic en cada región ( <path> y <polygon ), que no sea agregar el evento (click) en todos los 70 elementos <path> y <polygon , porque me parece mucho? repetición de código

Nota : aquí no puedo usar un bucle en los elementos SVG.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Lo he hecho agregando un evento de clic en cada elemento svg. Por supuesto, no debe hacerlo usted mismo, pero puede navegar programáticamente en sus elementos dom y agregar el evento de clic automáticamente.

No sé cómo es tu código, pero aquí un ejemplo:

 <svg #mySvg></svg>

en el componente.ts tal vez algo como esto debería funcionar:

 @ViewChild('mySvg') mySvg: SVGElement; // other code const children = this.mySvg.children; for (var i = 0; i < children.length; i++) { const childElement = children[i]; childElement.addEventListener('click', function (e) { // Do stuff }); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Use ViewChild o ViewChildren según su caso de uso.

Esto es un poco pseudocódigo, pero debería ayudarlo a comenzar.

 @Component({ ... template: `<svg #map>...<svg>` }) export class MapComponent implements AfterViewInit { @ViewChild('map') map: HTMLElement // or SvgHTMLElement counterpart @HostListener('click') onMapComponentClicked(event: MouseEvent) { const clickedElement = this.getClickedSvg(event) if(!clickedElement) return // Do something with the clicked SVG; maybe read it's ID } private getClickedSvg(event: MouseEvent): HTMLElement? { return ( Array.from(this.map.children).find(el => el.contains(event.target)) ) } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda