Bagaimana cara menambahkan banyak fungsi dalam SATU klik?


293

Saya sudah mencari cara untuk menjalankan ini tetapi saya tidak dapat menemukan apa pun yang terkait sejauh ini, :( Saya bisa membuat sarang kedua fungsi ya tapi saya hanya ingin tahu apakah ini mungkin? Saya ingin melakukan ini secara harfiah:

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

Kode JS saya saat ini:

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

Saya ingin memanggil dua fungsi hanya dengan satu klik, bagaimana saya bisa melakukan ini di angularJS? Saya pikir ini akan langsung seperti di CSS ketika Anda menambahkan beberapa kelas ... tapi itu tidak :(

Jawaban:


652

Anda memiliki 2 opsi:

  1. Buat metode ketiga yang membungkus kedua metode. Keuntungannya di sini adalah Anda lebih sedikit menaruh logika pada template Anda.

  2. Kalau tidak, jika Anda ingin menambahkan 2 panggilan di ng-klik Anda dapat menambahkan ';' setelah edit($index)seperti ini

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

Lihat di sini: http://jsfiddle.net/laguiz/ehTy6/


1
Saya telah menggunakan metode dua (yang melakukan apa yang dibutuhkan), tetapi alasan apa yang membuat tidak ada dua panggilan dalam satu ng-click?
Dave Everitt

1
Itu sebabnya saya memberi 2 opsi. Secara pribadi saya lebih suka untuk membungkus panggilan di controller saya tetapi terserah Anda.
Maxence

4
Tidak ada masalah dengan opsi 2 tetapi opsi 1 lebih bersih karena Anda harus menghindari menambahkan kode dan logika dalam pandangan Anda. Lebih baik jika Anda perlu memodifikasi sesuatu di masa depan.
Dani Barca Casafont

5
Dalam kasus saya sendiri, Opsi 2 berarti menghindari menambahkan fungsi umum di dalam arahan, yang mungkin lebih lambat dan pasti lebih sulit untuk dipertahankan.
Alex

2
Opsi 1 juga memberi Anda satu lagi fungsi yang tidak perlu harus diuji
Parris Varney

18

Anda dapat memanggil beberapa fungsi dengan ';'

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

8

Banyak orang menggunakan opsi (klik) jadi saya akan membagikan ini juga.

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

4
Menggunakan (klik) = "function (); function2 ()" juga berfungsi. Saya baru tahu dan ingin berbagi.
amlane86

Saya menemukan ini berguna ketika mengikat keyup.enter. The ;pemisahan tidak bekerja karena metode tidak selalu mengeksekusi dalam rangka.
xandermonkey

2

Coba ini:

  • Buat koleksi fungsi
  • Buat fungsi yang melewati dan menjalankan semua fungsi dalam koleksi.
  • Tambahkan fungsi ke html
array = [
    function() {},
    function() {},
    function() {}
]

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

ng - click = "loop()"

1

Ikuti di bawah ini

ng-click="anyFunction()"

anyFunction() {
   // call another function here
   anotherFunction();
}

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

1
Sintaks di sini salah. Seperti dijelaskan di atas, titik koma adalah pembatas; bukan koma ... Di antara hal-hal lain ...
Erik Grosskurth
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.