2017-01-07 4 views
1

Я следую this Ответ (и this скрипка) о том, как это сделать.Trigger ng-submit on ng-click

Вид:

<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 is not a function

... на линии выделены в директиве. Глядя на документы, это кажется правильным. В чем причина неудачи?

ОТВЕТ: (если ответ JQuery желанной, посмотрите на нижеприведенный ответ)

Чистый угловой способ сделать это:

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

ответ

1

Похоже trigger не часть JQLite, которая поставляется с угловым. Возможно, вам придется загрузить JQuery перед загрузкой углового.

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

ИЛИ

Как часть вашей сборки трубопровода (пехотинец/Глоток/WebPack и т.д.)

+0

Спасибо! Я чувствую, что это сработает, но вместо этого я нашел угловатый способ сделать это. – wmash

+0

А хорошо. Это даже лучше. Позаботьтесь о том, как? – Chanthu

0

Посмотреть другой ответ для подхода JQuery. Для чистого углового подхода я использовал:

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