2015-04-27 79 views
5

我正在用AngularJS創建一個表單嚮導。使用angularjs,我如何觸發點擊,還是有更好的方法?

想想每個字段集像這樣:

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

我所做的是,在我的控制器中發現的當前字段集和下一個字段集,像這樣:

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

所以第一,我不確定這是否是絕對最好的方式,但它是有效的。

回到我的主要問題...在其中一個字段集中,我有一些li元素,如果點擊了某些元素,我想自動觸發點擊NEXT按鈕。

我嘗試添加一個NG單擊

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

但是,當我創建了一個功能觸發按鈕點擊,我得到了錯誤:

Error: $rootScope:inprog Action Already In Progress 

所以我我想要達到jQuery,但我確信有這樣做的角度。

+0

哪裏是'fs.TriggerClick'功能在你的控制器? –

+0

@RameshRajendran我在得到注意到的錯誤後刪除了它,但它會在我的示例中在此評論之後大約10秒後回來:) – user1447679

+0

我找到了一些與「inprog」錯誤有關的答案,但這讓我質疑是否我應該以不同的方式處理事情。 – user1447679

回答

7

您必須跳出當前的$ apply()循環。這樣做的一種方法是使用$超時()(See why

試試這個:

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

控制器

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

錯誤:$ rootScope:inprog操作已在進行中 – user1447679

+0

這是有效的,我發現這個解決方案在相關的錯誤答案中。我想我的掛斷是,這真的是處理它的最好方法嗎?它對我有一種(哈克)的感覺,不是那種感覺......只是想確定我正在做的事情是正確的。 – user1447679

+0

using $ event.stopPropagation();而不是$超時的作品? – jbigman

相關問題