Виклик функції при події клацання в Angular 2


95

Як оголосити функцію всередині компонента (typecript) і викликати її під час натискання в Angular 2? Нижче наведено код тієї самої функціональності в Angular 1, для якого мені потрібен код Angular 2:

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

// контролер

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

5
Чому ви позначили тегом, angular2якщо це Angular 1додаток?
— BeetleJuice

Мізерний опис, структурно неправильні речення, потворний код. весь результат у неправильному розумінні. люди, це питання Angular1!
— Рейраа,

1
Що б я не писав у коді, я хочу зробити те саме в angular2.
— невідомо

Стара публікація, але я рекомендую подивитися на "екскурсію Героєм" із документації angular 2.
— Джефф,

Це кутовий 1 чи кутовий 2? Це мало бути вказано
— Судхір Каушик

Відповіді:


120

Код компонента:

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

}

Вид:

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

Як ви можете бачити в коді, я оголошую обробник клацань таким чином (click)="open($event, item)"і надсилаю як подію, так і елемент (оголошений в *ngFor) до open()методу (оголошеного в коді компонента).

Якщо ви просто хочете показати товар, і вам не потрібно отримувати інформацію про подію, ви можете просто зробити (click)="open(item)"і змінити openметод, як цеpublic open(item) { ... }


як щодо зникнення цього меню після виходу? моя сторінка завантаження даних за допомогою меню, подібного до цього, і для кожної іншої сторінки натискання має своє, але після виходу та переходу на сторінку входу це меню несподівано з'явилося, тому після натискання кнопки зникло, але icant вирішив це.
— saber tabatabaee yazdi

@sabertabatabaeeyazdi, не могли б ви створити демонстрацію Stackblitz зі своєю проблемою, щоб я міг її поглянути?
— sebaferreras

57

Точний перехід на Angular2 + є таким:

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

також у файлі компонента:

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


3

Рядок у коді контролера, який читає, $scope.myFunc={повинен бути $scope.myFunc = function() {тією function()частиною, яку важливо вказати, це функція!

Оновлений код контролера буде

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

1

Це працювало у мене: :)

<button (click)="updatePendingApprovals(''+pendingApproval.personId, ''+pendingApproval.personId)">Approve</button>
updatePendingApprovals(planId: string, participantId: string) : void {
  alert('PlanId:' + planId + '    ParticipantId:' + participantId);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.