104 votes

Appel d'une fonction sur un événement de clic dans Angular 2

Comment déclarer une fonction à l'intérieur d'un composant (typecript) et l'appeler sur un événement de clic dans Angular 2 ? Voici le code pour la même fonctionnalité en Angular 1 pour laquelle j'ai besoin du code d'Angular 2 :

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

//contrôleur

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

6 votes

Pourquoi avez-vous marqué angular2 s'il s'agit d'un Angular 1 l'application ?

0 votes

Une description insuffisante, des phrases structurellement incorrectes, un code moche, tout cela aboutit à une mauvaise compréhension.

1 votes

Tout ce que j'ai écrit dans le code, je veux le faire dans angular2.

132voto

sebaferreras Points 30016

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);
  }

}

Voir :

<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 clic comme ceci (click)="open($event, item)" et en envoyant à la fois l'événement et l'élément (déclarés dans le fichier *ngFor ) à la open() (déclarée dans le code du composant).

Si vous voulez juste montrer l'élément et que vous n'avez pas besoin d'obtenir des informations de l'événement, vous pouvez juste faire (click)="open(item)" et modifier le open comme ceci public open(item) { ... }

0 votes

Comment faire disparaître ce menu après la déconnexion ? ma page databootstrapper utilise un menu comme celui-ci et toutes les autres pages push ont le leur, mais après la déconnexion et l'accès à la page de connexion, ce menu apparaît de manière inattendue et disparaît après un clic, mais je ne peux pas gérer cela.

0 votes

@sabertabatabaeeyazdi pouvez-vous s'il vous plaît créer une Démonstration de Stackblitz avec votre problème pour que je puisse y jeter un œil ?

60voto

Alireza Points 40192

Transfert exact vers Angular2+ est le suivant :

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

également dans votre fichier de composants :

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");
  }
}

10voto

Zasypin N.V. Points 186

https://angular.io/guide/user-input - Il y a un exemple simple.

1 votes

Se référer aux documentations originales est une meilleure approche, car il y a de grandes chances d'en apprendre davantage.

3voto

Nauman Points 1484

La ligne dans votre code de contrôleur, qui se lit $scope.myFunc={ devrait être $scope.myFunc = function() { le site function() Il est important d'indiquer que c'est une fonction !

Le code du contrôleur mis à jour serait le suivant

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

2voto

user2075104 Points 1

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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X