web-dev-qa-db-fra.com

Appeler une fonction sur l'événement click dans Angular 2

Comment déclarer une fonction dans un composant (TypeScript) et l'appeler lors d'un événement click dans Angular 2? Voici le code de la même fonctionnalité dans Angular 1 pour lequel j'ai besoin du code Angular 2:

<button ng-click="myFunc()"></button>

//manette

app.controller('myCtrl', ['$scope', function($cope) {
    $scope.myFunc= {
        console.log("function called");
    };
}]);
64
unknown

Code du composant:

import { Component } from "@angular/core";

@Component({
  templateUrl:"home.html"
})
export class HomePage {

  public items: Array<string>;

  constructor() {
    this.items = ["item1", "item2", "item3"]
  }

  public open(event, item) {
    alert('Open ' + item);
  }

}

Vue:

<ion-header>
  <ion-navbar primary>
    <ion-title>
      <span>My App</span>
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content>
  <ion-list>
    <ion-item *ngFor="let item of items" (click)="open($event, item)">
      {{ item }}
    </ion-item>
  </ion-list>
</ion-content>

Comme vous pouvez le voir dans le code, je déclare le gestionnaire de clics comme ceci (click)="open($event, item)" et envoie à la fois l'événement et l'élément (déclaré dans le *ngFor) à la méthode open() (déclarée dans le code du composant).

Si vous souhaitez simplement afficher l'élément et que vous n'avez pas besoin d'obtenir d'informations sur l'événement, vous pouvez simplement faire (click)="open(item)" et modifier la méthode open comme ceci public open(item) { ... }

86
sebaferreras

Le transfert exact vers Angular2 + est comme ci-dessous:

<button (click)="myFunc()"></button>

également dans votre fichier de composant:

import { Component, OnInit } from "@angular/core";

@Component({
  templateUrl:"button.html" //this is the component which has the above button html
})

export class App implements OnInit{
  constructor(){}

  ngOnInit(){

  }

  myFunc(){
    console.log("function called");
  }
}
42
Alireza

https://angular.io/guide/user-input - voici un exemple simple.

10
Zasypin N.V.

La ligne dans votre code de contrôleur, qui lit $scope.myFunc={ devrait être $scope.myFunc = function() { la partie function() est importante à indiquer, c'est une fonction!

Le code du contrôleur mis à jour serait

app.controller('myCtrl',['$scope',function($cope){
    $scope.myFunc = function() {
    console.log("function called");
  };
}]);
3
Numan

Cela a fonctionné pour moi: :)

<button (click)="updatePendingApprovals(''+pendingApproval.personId, ''+pendingApproval.personId)">Approve</button>
updatePendingApprovals(planId: string, participantId: string) : void {
  alert('PlanId:' + planId + '    ParticipantId:' + participantId);
}
1
Amrit Jain