使用angularjs,我如何触发点击,还是有更好的方法?

use*_*679 5 angularjs angularjs-ng-click

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

我所做的是,在我的控制器中找到了当前的字段集和下一个字段集,如下所示:

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;
  }
});
Run Code Online (Sandbox Code Playgroud)

首先,我不确定这是否是绝对最好的方法,但它确实有效.

至于我的主要问题...在其中一个字段集中,我有一些li元素,如果单击某些元素,我想自动触发单击NEXT按钮.

我尝试添加ng-click:

<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');
  }
});
Run Code Online (Sandbox Code Playgroud)

但是当我创建一个触发单击按钮的函数时,我得到了错误:

Error: $rootScope:inprog Action Already In Progress
Run Code Online (Sandbox Code Playgroud)

所以我想要达到jQuery,但我确信有一种有角度的方式来做到这一点.

jbi*_*man 8

你必须打破当前的$ apply()循环.一种方法是使用$ timeout()(查看原因)

试试这个:

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

调节器

$scope.triggerClick = function(){
    $timeout(function() {
        angular.element('#MyButtonTest').triggerHandler('click');
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)