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

154
Visualizações
Call a typescript method from html written inside typescript component

I have a pop-up with 2 buttons, Update and Delete. When the Update button is pressed, I want to make the initial pop-up disappear and a new pop-up appear populated with the same fields but editable with another 2 buttons at the bottom, Confirm and Delete.

I want to configure the code for the Update pop-up in a separate method and call it from the HTML button when the Update button is pressed

How do I call the desired method (myFunction) from the HTML written inside the TypeScript Component at the button component?

 private initMap(): void {
    this.map = L.map('map', {
      center: this.centroid,
      zoom: 2.8
    });

    this.tiles = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 
    {
      minZoom: 2.8,
      attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
    });

    this.tiles.addTo(this.map);
    
    this.powerPlantService.getAll().subscribe((data: any)=>{
      console.log(data);
      this.geoJsonFeature = data;
      
      L.geoJSON(data, {onEachFeature: myOnEachFeatureMethod}).addTo(this.map)

    }) 

    function myOnEachFeatureMethod(feature:any, layer:L.GeoJSON)
    {
      
        layer.bindPopup(
          "Power Plant Id: " + feature.properties.xxx +
          "<br>Power Plant Name: " + feature.properties.xxxx +
          '<div style="text-align:center"> '+

          //below in the button i want to call the myFunction method. How do I do that?
          '<br><button type="button" class="btn btn-primary" style="margin-right: 5px" data = "' + feature.properties.xxx + '" ' + '>Update</button>' + 

          '<button type="button" class="btn btn-danger" style="margin-left: 5px" data = "' + feature.properties.xxxx + '" ' + '>Delete</button>'   +
          '</div>'
          );  
    }  
  }  
 
  myFunction(layer: any) {
    console.log("Yeet");
    layer.bindPopup("Yeet");
  }

This is the pop-up displayed when the map pin is clicked

enter image description here

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

0

In order to pass messages to the component from the button click event, we will use use normal javascript file and include it in the angular.json.

We also need rxjs declared on the window object. rxjs which is installed within Angular through npm isn't though, so we include a cdn script file in the head of the index.html file.

src/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    ....
    <script type="text/javascript" src="https://unpkg.com/rxjs@%5E7/dist/bundles/rxjs.umd.min.js"></script>
  </head>
  <body>
    <app-root></app-root>
  </body>
</html>

Create a custom.js file within the /src/assets/js folder, and create a new RxJS Subject and also declare the function you want to call. Within that function just call next on the subject to emit a new event/message.

src/assets/js/custom.js

var my_custom_subject = new rxjs.Subject()
function myFunction() {
  my_custom_subject.next('hello from custom')
}

In order the render this script within your application, you can either include it in the head tag as well or include it within the scripts array in the angular.json file. It's either the head tag or either in the configuration file, otherwise it will try to declare the my_custom_subject twice.

angular.json

{
  ...
  "projects": {
    YOUR_PROJECT_NAME: {
      "architect": {
        "build": {
          "options": {
            "scripts": [
              "src/assets/js/custom.js"
            ]
          }
        }
      }
    }
  }
}

Within your component declare a const with the same name as the subject you created in the custom.jsfile. Within the ngOnInit subscribe to the Observable to listen to the events.

import { Component, OnDestroy, OnInit } from '@angular/core';
import { Subject } from 'rxjs';

declare const my_custom_subject: Subject<any>

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css'],
})
export class HomeComponent implements OnInit, OnDestroy {
  private subcription: Subscription;

  ...

  ngOnInit(): void {
    this.subcription = my_custom_subject.subscribe(data => console.log('subscription', data))
  }

  ngOnDestroy(): void {
    this.subcription.unsubscribe();
  }

  ...

}

This will allow you the call myFunction declared with regular javascript which will pass a message to your component. By subscribing to it, you're actually listening to the click events.

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