Chame uma função no evento de clique no Angular 2

95

Como declarar uma função dentro de um componente (texto digitado) e chamá-la em um evento click no Angular 2? A seguir está o código para a mesma funcionalidade no Angular 1 para o qual eu exijo o código Angular 2:

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

//controlador

app.controller('myCtrl', ['$scope', function($cope) {
    $scope.myFunc= {
        console.log("function called");
    };
}]);
desconhecido
fonte
5
Por que você marcou angular2se este é um Angular 1aplicativo?
BeetleJuice
Descrição escassa, frases estruturalmente erradas, código feio. tudo isso resulta em uma compreensão errada. pessoal, essa é uma pergunta do Angular1
Reyraa
1
Tudo o que escrevi em código, quero fazer o mesmo no angular2.
desconhecido,
Postagem antiga, mas eu recomendo olhar o "tour de Heros" da documentação do angular 2.
Jeff,
É Angular 1 ou Angular 2? Deveria ter sido especificado
Sudhir Kaushik

Respostas:

121

Código do componente:

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

}

Visão:

<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>

Como você pode ver no código, estou declarando o manipulador de cliques dessa forma (click)="open($event, item)"e enviando o evento e o item (declarado no *ngFor) para o open()método (declarado no código do componente).

Se você deseja apenas mostrar o item e não precisa obter informações do evento, você pode apenas fazer (click)="open(item)"e modificar o openmétodo como estepublic open(item) { ... }

sebaferreras
fonte
que tal desaparecer este menu após o logoff? meu databootstrapperpage usando um menu como este e todas as outras páginas push tem seu próprio, mas depois de fazer logoff e ir para a página de login, esse menu apareceu inesperadamente, então após o clique desapareceu, mas não consigo lidar com isso.
sabre tabatabaee yazdi
@sabertabatabaeeyazdi, você poderia criar uma demonstração do Stackblitz com o seu problema para que eu possa dar uma olhada nele?
sebaferreras
58

A transferência exata para Angular2 + é a seguinte:

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

também em seu arquivo de componente:

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

A linha em seu código de controlador, que $scope.myFunc={deve ser $scope.myFunc = function() {a function()parte, é importante indicar, é uma função!

O código do controlador atualizado seria

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

Isso funcionou para mim: :)

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