在ng-click上触发提交

时间:2017-01-07 01:00:08

标签: angularjs

我正在关注如何完成此事的this回答(和this小提琴)。

查看:

<section>
    <form style="display: none" id="addFriendForm" name="vm.form.addFriendForm" class="form-horizontal" submit-on="submitAddFriendForm" ng-submit="vm.save(vm.form.addFriendForm.$valid)" novalidate>
        <input ng-model="vm.userInput" required>
    </form>
    <div class="list-group">
        <a ng-repeat="user in vm.users" ng-click="vm.triggerSubmit(user)" class="list-group-item">
            ...
        </a>
    </div>
</section>

指令:

function submitOn() {
    return {
        link: function postLink(scope, element, attrs) {
            scope.$on(attrs.submitOn, function() {
                setTimeout(function() {
                    // Error:
                    element.trigger('submit');
                });
            });
        }
    };
}

控制器: triggerSubmit

// Trigger submit of the form
function triggerSubmit(user) {
    vm.userInput = user;
    $scope.$broadcast('submitAddFriendForm');
}

走过这一步,我得到错误:

  

TypeError:element.trigger不是函数

...在指令中突出显示的行上。看看文档,这似乎是正确的。它失败的原因是什么?

解答: (如果需要jQuery答案,请查看下面的答案)

一种纯粹的角度方式是:

angular.element(element).triggerHandler('submit');

2 个答案:

答案 0 :(得分:1)

看起来trigger不是角色附带的JQLite的一部分。 您可能必须在加载角度之前加载JQuery。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>

OR

作为构建管道的一部分(grunt / gulp / webpack等)

答案 1 :(得分:0)

请参阅jQuery方法的其他答案。对于我使用的纯角度方法:

angular.element(element).triggerHandler('submit');