2013-05-29 10 views
237

Ho essere alla ricerca di come eseguire questo, ma non riesco a trovare tutto ciò che riguarda finora, :( potrei nido entrambe le funzioni di sì ma mi chiedo solo se questo è possibile? mi piacerebbe fare questo letteralmente:Come aggiungere molte funzioni in ONE ng-click?

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

il mio codice JS in questo momento:?

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

mi piacerebbe chiamare due funzioni con un solo click, come posso fare questo in angularJS ho pensato che' d essere semplice come in CSS quando aggiungi più classi ... ma non lo è :(

risposta

535

Hai 2 opzioni:

  1. creare un terzo metodo che avvolgono entrambi i metodi. Il vantaggio qui è che metti meno logica nel tuo modello.

  2. In caso contrario, se si desidera aggiungere 2 chiamate in ng-clic, è possibile aggiungere ";" dopo edit($index) come questo

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

vedere qui: http://jsfiddle.net/laguiz/ehTy6/

+1

Ho metodo a due (che fa ciò che è necessario) usato, ma quello che ragioni ci sono * non * avere due chiamate in un 'ng-click'? –

+0

Entrambi funzionano è solo una questione di provare a mettere la logica nei controller solo. In questo caso non è un grosso problema :) – Maxence

+0

Non vedo assolutamente nulla di sbagliato nell'opzione 2 in quanto è un lavoro di una direttiva (come ng-clic) per mappare l'azione dell'utente sul comportamento dell'ambito. – ThinkingInBits

-14
ng-click "$watch(edit($index), open())" 
+1

La sintassi qui non è corretta. Come spiegato sopra, il punto e virgola è il delimitatore; non una virgola ... Tra l'altro ... –

9

È possibile chiamare più funzioni con ';'

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

Prova questo:

  • Fai un insieme di funzioni
  • Fare una funzione che scorre ed esegue tutte le funzioni della collezione.
  • aggiungere la funzione alla html
array = [ 
    function() {}, 
    function() {}, 
    function() {} 
] 

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

ng - click = "loop()"