Wywołaj funkcję po kliknięciu zdarzenia w Angular 2

95

Jak zadeklarować funkcję wewnątrz komponentu (maszynopisu) i wywołać ją na zdarzeniu kliknięcia w Angular 2? Poniżej znajduje się kod dla tej samej funkcjonalności w Angular 1, dla której potrzebuję kodu Angular 2:

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

//kontroler

app.controller('myCtrl', ['$scope', function($cope) {
    $scope.myFunc= {
        console.log("function called");
    };
}]);
nieznany
źródło
5
Dlaczego oznaczyłeś tagiem, angular2jeśli jest to Angular 1aplikacja?
BeetleJuice,
Skąpe opisy, strukturalnie błędne zdania, brzydki kod. wszystkie prowadzą do złego zrozumienia. ludzie, to jest pytanie Angular1!
Reyraa
1
Cokolwiek napisałem w kodzie, chcę zrobić to samo w angular2.
nieznany
Stary post, ale polecam spojrzeć na "tour of Heros" z dokumentacji angulara 2.
Jeff,
Czy to Angular 1 czy Angular 2? Powinno być sprecyzowane
Sudhir Kaushik

Odpowiedzi:

121

Kod komponentu:

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

}

Widok:

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

Jak widać w kodzie, deklaruję procedurę obsługi kliknięcia w ten sposób (click)="open($event, item)"i wysyłam zarówno zdarzenie, jak i pozycję (zadeklarowaną w *ngFor) do open()metody (zadeklarowanej w kodzie komponentu).

Jeśli chcesz tylko pokazać element i nie potrzebujesz informacji z wydarzenia, możesz po prostu zrobić (click)="open(item)"i zmodyfikować openmetodę w ten sposóbpublic open(item) { ... }

sebaferreras
źródło
co powiesz na zniknięcie tego menu po wylogowaniu? moja databootstrapperpage korzystająca z menu takiego jak to i każda inna strona push ma swoje własne, ale po wylogowaniu się i przejściu do strony logowania to menu pojawiło się nieoczekiwanie, więc po kliknięciu zniknęło, ale szybko sobie z tym poradzę.
saber tabatabaee yazdi
@sabertabatabaeeyazdi czy mógłbyś utworzyć demo Stackblitz z Twoim problemem, abym mógł się temu przyjrzeć?
sebaferreras
58

Dokładny transfer do Angular2 + wygląda jak poniżej:

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

również w pliku komponentu:

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
źródło
10

https://angular.io/guide/user-input - oto prosty przykład.

Zasypin NV
źródło
1
Odwołanie się do oryginalnych dokumentów jest lepszym podejściem, ponieważ jest to duża szansa, aby dowiedzieć się więcej.
Reyraa
3

Linia w kodzie kontrolera, który brzmi $scope.myFunc={powinny być część jest ważne, aby wskazać, że jest to funkcja!$scope.myFunc = function() {function()

Zaktualizowany kod kontrolera to

app.controller('myCtrl',['$scope',function($cope){
    $scope.myFunc = function() {
    console.log("function called");
  };
}]);
Numan
źródło
1

To zadziałało dla mnie: :)

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