2015-04-27 5 views
5

AngularJS ile bir form sihirbazı oluşturuyorum. şöyle Her fieldset aitAngularjs ile bir tıklamayı nasıl tetikleyebilirim veya daha iyi bir yol var mı?

Think: Yani ilk

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

:

<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> 

Benim yaptığım ise, benim denetleyicisi şimdiki fieldset ve şöyle sonraki fieldset bulundu Bunu yapmanın mutlak en iyi yolu olup olmadığından emin değilim, ama işe yarıyor.

Asıl soruma inanıyorum ... Tarla kümelerinden birinin içinde bazı li elemanlar var ve bazı öğeler tıklandığında NEXT düğmesine otomatik olarak tıklamak istiyorum.

Bir ng tıklama ekleme çalıştı:

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

Ama düğmeyi tıklamanın tetiklemek için bir işlevi oluştururken, ben hata var: Ben Yani

Error: $rootScope:inprog Action Already In Progress 

jQuery'ye ulaşmak istiyorum ama eminim bunu yapmanın açısal bir yolu var.

+0

nerede controller içerisinde 'fs.TriggerClick' fonksiyonu? –

+0

@RameshRajendran Belirtilen hatayı aldıktan sonra kaldırdım, ancak bu yorumdan sonra yaklaşık 10 saniye içinde örneğimde olacağım :) – user1447679

+0

Bu hatayla ilgili bazı cevaplar buldum "inprog" ama bu bana soru sormamı sağladı. Farklı şeylerle uğraşmalıyım. – user1447679

cevap

7

Geçerli $ apply() döngüsünden çıkmak zorundasınız. Bunu yapmanın bir yolu, deneyin $ aşımını() (See why)

kullanıyor bu:

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

Kontrolör

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

Hata: $ rootScope: inprog İşlem Devam Ediyor Devam Ediyor – user1447679

+0

Bu işe yarıyor ve bu çözümü ilgili hatalara yanıt olarak buldum. Bence asılmam, bunun üstesinden gelmenin en iyi yolu bu mu? Benim için (hacky) bir his var, öyle değil ... Sadece doğru şeyler yaptığımı emin olmak istiyorum. $ Event.stopPropagation() kullanarak – user1447679

+0

; $ timeout işleri yerine mi? – jbigman