เรียกใช้ฟังก์ชันบนเหตุการณ์การคลิกใน Angular 2


95

วิธีการประกาศฟังก์ชันภายในองค์ประกอบ (typescript) และเรียกมันในเหตุการณ์คลิกใน 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!
Reyraa

1
สิ่งที่ฉันเขียนในรหัสฉันต้องการให้ทำเช่นเดียวกันใน angular2
ไม่ทราบ

โพสต์เก่า แต่ขอแนะนำให้ดู "tour of Heros" จากเอกสาร angular 2
Jeff

มันคือ Angular 1 หรือ Angular 2? ควรระบุไว้
Sudhir Kaushik

คำตอบ:


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) { ... }


จะหายไปเมนูนี้หลังจากออกจากระบบได้อย่างไร? databootstrapperpage ของฉันโดยใช้เมนูเช่นนี้และหน้าพุชอื่น ๆ ทั้งหมดมีของตัวเอง แต่หลังจากออกจากระบบและหน้าเข้าสู่ระบบไปที่เมนูนี้ไม่คาดคิดปรากฏขึ้นหลังจากคลิกหายไป แต่ 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);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.