2015-04-27 8 views
5

Sto creando una procedura guidata modulo con AngularJS.Con angularjs, come posso attivare un clic o esiste un modo migliore?

Pensate di ogni fieldset in questo modo:

<div ng-controller="MyController as fs"> 
    <fieldset> 
     ... 
     <button ng-click="fs.StepForward($event)">Next</button> 
    </fieldset> 

    <fieldset> 
     ... 
     <button ng-click="fs.StepBackward($event)">Previous</button> 
     <button ng-click="fs.StepForward($event)">Next</button> 
    </fieldset> 
</div> 

Quello che ho fatto è, a mio controller trovato il fieldset corrente e la prossima fieldset in questo modo: Quindi, prima

app.controller("MyController", function() { 
    var ft = this; 
    ft.StepForward = function(event) { 
    // It's here that I need to find the fieldset 
    ft.current_fs = event.currentTarget.parentNode; 
    ft.next_fs = event.currentTarget.parentNode.nextElementSibling; 
    } 
}); 

, Non sono sicuro se questo è il modo migliore in assoluto per farlo, ma funziona.

Giù alla mia domanda principale ... All'interno di uno dei campi ho alcuni elementi li, e se alcuni elementi sono cliccati, voglio attivare un clic sul pulsante AVANTI automaticamente.

Ho provato ad aggiungere un ng clic:

<fieldset> 
    <ul> 
    <li><a ng-click="fs.TriggerClick($event)">Some Itme</a></li> 
    </ul> 
    <button id="MyButtonTest" ng-click="fs.StepForward($event)">Next</button> 
</fieldset> 

app.controller("MyController", function() { 
    var ft = this; 
    ft.StepForward = function(event) { 
    // It's here that I need to find the fieldset 
    ft.current_fs = event.currentTarget.parentNode; 
    ft.next_fs = event.currentTarget.parentNode.nextElementSibling; 
    } 

    ft.TriggerClick = function(event) { 
    angular.element('#MyButtonTest').trigger('click'); 
    } 
}); 

Ma quando ho creato una funzione per attivare un clic sul pulsante, ho ottenuto l'errore:

Error: $rootScope:inprog Action Already In Progress 

Così ho' Voglio raggiungere jQuery, ma sono sicuro che c'è un modo angolare per farlo.

+0

dove è la funzione 'fs.TriggerClick' nel controller? –

+0

@RameshRajendran L'ho rimosso dopo aver ricevuto l'errore annotato, ma tornerà nel mio esempio in circa 10 secondi dopo questo commento :) – user1447679

+0

Ho trovato alcune risposte relative a quell'errore "inprog" ma che mi hanno portato a chiedermi se Dovrei gestire le cose in modo diverso. – user1447679

risposta

7

È necessario uscire dal ciclo $ apply() corrente. Un modo per farlo è usare $ timeout() (See why)

Prova questo:

<fieldset> 
    <ul> 
    <li><a ng-click="triggerClick()">Some Item</a></li> 
    </ul> 
    <button id="MyButtonTest" ng-click="fs.StepForward($event)">Next</button> 
</fieldset> 

controller

$scope.triggerClick = function(){ 
    $timeout(function() { 
     angular.element('#MyButtonTest').triggerHandler('click'); 
    }, 0); 
} 
+0

Errore: $ rootScope: inprog Azione già in corso – user1447679

+0

Funziona, e ho trovato questa soluzione nelle risposte correlate a quell'errore. Penso che il mio rammarico sia, è davvero il modo migliore per gestirlo? Ha una sensazione di (hacky) per me, non che sia ... Voglio solo essere sicuro che sto facendo le cose per bene. – user1447679

+0

utilizzando $ event.stopPropagation(); invece di $ timeout funziona? – jbigman

Problemi correlati