จะเพิ่มฟังก์ชั่นต่าง ๆ ได้ในคลิกเดียว?


293

ฉันกำลังมองหาวิธีการดำเนินการนี้ แต่ฉันไม่พบสิ่งที่เกี่ยวข้องจนถึงตอนนี้ :( ฉันสามารถซ้อนฟังก์ชันทั้งสองได้ แต่ฉันแค่สงสัยว่ามันเป็นไปได้หรือไม่ฉันต้องการทำสิ่งนี้อย่างแท้จริง:

<td><button class="btn" ng-click="edit($index) open()">Open me!</button></td>

รหัส JS ของฉันในขณะนี้:

$scope.open = function () {
  $scope.shouldBeOpen = true;
};      

$scope.edit = function(index){

  var content_1, content_2;
      content_1 = $scope.people[index].name;
      content_2 = $scope.people[index].age;

  console.log(content_1);
};

ฉันต้องการโทรหาทั้งสองฟังก์ชันด้วยการคลิกเพียงครั้งเดียวฉันจะทำสิ่งนี้ใน angularJS ได้อย่างไร ฉันคิดว่ามันจะตรงไปตรงมาเหมือนใน CSS เมื่อคุณเพิ่มหลายคลาส ... แต่ไม่ใช่ :(

คำตอบ:


652

คุณมี 2 ตัวเลือก:

  1. สร้างวิธีที่สามที่ล้อมทั้งสองวิธี ข้อดีที่นี่คือคุณใส่ตรรกะน้อยลงในแม่แบบของคุณ

  2. มิฉะนั้นหากคุณต้องการเพิ่ม 2 สายใน ng-click คุณสามารถเพิ่ม ';' หลังจากedit($index)นี้

    ng-click="edit($index); open()"

ดูที่นี่: http://jsfiddle.net/laguiz/ehTy6/


1
ผมเคยใช้วิธีการสอง (ซึ่งไม่สิ่งที่จำเป็น) แต่สิ่งที่เหตุผลจะมีไม่ได้ที่จะมีสองสายในหนึ่งng-click?
Dave Everitt

1
นั่นเป็นเหตุผลที่ฉันให้ 2 ตัวเลือก โดยส่วนตัวแล้วฉันชอบที่จะปิดการโทรในคอนโทรลเลอร์ของฉัน แต่มันก็ขึ้นอยู่กับคุณ
Maxence

4
ไม่มีปัญหากับตัวเลือกที่ 2 แต่ตัวเลือกที่ 1 นั้นสะอาดกว่าเพราะคุณควรหลีกเลี่ยงการเพิ่มรหัสและตรรกะในมุมมองของคุณ จะดีกว่าถ้าคุณต้องการแก้ไขบางสิ่งในอนาคต
Dani Barca Casafont

5
ในกรณีของฉันเองตัวเลือกที่ 2 หมายถึงการหลีกเลี่ยงการเพิ่มฟังก์ชั่นทั่วไปภายในคำสั่งซึ่งอาจช้ากว่าและยากกว่าในการรักษา
Alex

2
ตัวเลือกที่ 1 ยังช่วยให้คุณมีฟังก์ชั่นการทดสอบที่ไม่จำเป็นอีกอย่างหนึ่ง
Parris Varney

18

คุณสามารถเรียกหลายฟังก์ชั่นได้ด้วย ';'

ng-click="edit($index); open()"

8

ผู้คนจำนวนมากใช้ตัวเลือก (คลิก) ดังนั้นฉันจะแชร์ด้วย

<button (click)="function1()" (click)="function2()">Button</button>

4
การใช้ (คลิก) = "function (); function2 ()" ก็ใช้ได้เช่นกัน ฉันเพิ่งค้นพบสิ่งนั้นและต้องการแบ่งปัน
amlane86

keyup.enterผมพบว่ามีประโยชน์นี้เมื่อผูกพันกับ การ;แยกไม่ทำงานเนื่องจากวิธีการไม่ได้ดำเนินการตามลำดับ
xandermonkey

2

ลองสิ่งนี้:

  • สร้างชุดของฟังก์ชัน
  • สร้างฟังก์ชั่นที่วนซ้ำและดำเนินการฟังก์ชันทั้งหมดในคอลเล็กชัน
  • เพิ่มฟังก์ชั่น html
array = [
    function() {},
    function() {},
    function() {}
]

function loop() {
    array.forEach(item) {
        item()
    }
}

ng - click = "loop()"


-15
ng-click "$watch(edit($index), open())"

1
ไวยากรณ์ที่นี่ไม่ถูกต้อง ดังที่อธิบายไว้ข้างต้นอัฒภาคคือตัวคั่น ไม่ใช่เครื่องหมายจุลภาค ... เหนือสิ่งอื่นใด ...
Erik Grosskurth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.