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

时间:2015-04-27 16:34:46

标签: 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>

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

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

但是当我创建一个触发按钮单击的功能时,我收到错误:

Error: $rootScope:inprog Action Already In Progress

所以我想要接触jQuery,但我确信这是一种有角度的方式。

1 个答案:

答案 0 :(得分:8)

你必须打破当前的$ apply()循环。一种方法是使用$ timeout()(See why

试试这个:

git diff

控制器

diff-tree