Bir ng tıklamayla birçok işlev nasıl eklenir?


293

Bunu yürütmek için arıyorum ama şimdiye kadar ilgili bir şey bulamıyorum, :( Ben her iki işlevi de yuva olabilir ama sadece bunun mümkün olup olmadığını merak ediyorum? Bunu tam anlamıyla yapmak istiyorum:

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

Şu anda JS kodum:

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

Tek bir tıklama ile iki işlevi çağırmak istiyorum, bunu açısalJS'de nasıl yapabilirim? Birden fazla sınıf eklediğinizde CSS'deki gibi düz olacağını düşündüm ... ama değil :(

Yanıtlar:


652

2 seçeneğiniz var:

  1. Her iki yöntemi de saran üçüncü bir yöntem oluşturun. Buradaki avantaj, şablonunuza daha az mantık koymanızdır.

  2. Aksi takdirde ng-click'e 2 çağrı eklemek isterseniz ';' sonra edit($index)böyle

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

Buraya bakın: http://jsfiddle.net/laguiz/ehTy6/


1
İkinci yöntemi kullandım (ne gerekli?), Ancak birinde iki çağrı olmamasının hangi nedenleri var ng-click?
Dave Everitt

1
Bu yüzden 2 seçenek verdim. Şahsen aramaları denetleyicime sarmayı tercih ederim ama size kalmış.
Maxence

4
Seçenek 2 ile ilgili bir sorun yok, ancak görünümlerinize kod ve mantık eklemekten kaçınmanız gerektiğinden seçenek 1 daha temiz. Gelecekte bir şeyi değiştirmeniz gerekiyorsa daha iyi olur.
Dani Barca Casafont

5
Benim durumumda, Seçenek 2, bir direktif içine ortak bir işlev eklemekten kaçınmak anlamına gelir, bu da muhtemelen daha yavaş ve bakımı daha zordur.
Alex

2
Seçenek 1 ayrıca test etmeniz gereken bir başka gereksiz işlev daha sunar
Parris Varney

18

';' İle birden fazla işlevi çağırabilirsiniz.

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

8

Birçok kişi (click) seçeneğini kullanıyor, bu yüzden ben de paylaşacağım.

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

4
(Click) = "function (); function2 ()" kullanılması da işe yarar. Bunu yeni öğrendim ve paylaşmak istedim.
amlane86

Bunu bağlarken faydalı buldum keyup.enter. ;Yöntemler her zaman sırayla yürütme değildi çünkü ayrılık çalışmadı.
xandermonkey

2

Bunu dene:

  • İşlevlerin bir koleksiyonunu oluşturun
  • Koleksiyondaki tüm işlevleri gerçekleştiren ve yürüten bir işlev yapın.
  • Fonksiyonu html'ye ekleyin
array = [
    function() {},
    function() {},
    function() {}
]

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

ng - click = "loop()"

1

Aşağıdakileri takip edin

ng-click="anyFunction()"

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

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

1
Buradaki sözdizimi yanlış. Yukarıda açıklandığı gibi, noktalı virgül ayırıcıdır; virgül değil ... Diğer şeylerin yanı sıra ...
Erik Grosskurth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.