2015-03-01 2 views
1

Как я могу получить доступ к атрибутам элемента формы внутри функции, вызываемой на ng-submit?элемент формы доступа с угловым элементом внутри функции ngsubmit

.controller('loginCtrl', function ($scope, $rootScope, $location, $window, session,$http) { 

    $scope.error = null; 
    console.log($scope); 

    $scope.attempt = function (url) { 
     //URL get passed.. but i want to fetch it from the form action attribute 
     var data = {username:$scope.info.u,password:$scope.info.u}; 

     $http.post(ul, data).success(function(response) { 
      $scope.error = "welcome"; 
      $rootScope.currentUser = data; 
      session.set('siUser', data); 
      $location.path('/dash'); 
     }).error(function(reason) { 
      $scope.error = "failed try again" + $scope.info.p + ' ' + $scope.info.u; 
     }); 
    }; 
}) 

HTML

<form role="form" ng-submit="attempt('<?=base_url('auth/login');?>')" method="post"> 
        <fieldset> 
         <div class="form-group"> 
          <input type="text" ng-model="info.u" placeholder="Username" class="form-control" ng-min-length="4" required /> 
          <p ng-show="info.u.$invalid" class="help-block">You username is required.</p> 
         </div> 
         <div class="form-group"> 
          <input type="password" name="password" ng-model="info.p" placeholder="Password" class="form-control" /> 
          <p ng-show="info.p.$invalid" class="help-block">password is required.</p> 
         </div> 
         <button ng-disabled="loginForm.$invalid" class="btn btn-lg btn-success btn-block" type="submit">Login</button> 
        </fieldset> 
       </form> 

в настоящее время, что я делаю, передавая его функции. но есть ли более чистый способ доступа к элементу из функции внутреннего контроллера?

ответ

1

Вы можете попробовать что-то вроде этого в вашем атрибуте ng-submit, ng-submit = "try ('...', $ event);?> ')" Передать параметр $ event. Однако не забудьте добавить его в функцию, а также, например, так:

$scope.attempt = function (url, $event) { 
     //URL get passed.. but i want to fetch it from the form action attribute 
     var data = {username:$scope.info.u,password:$scope.info.u}; 

     $http.post(ul, data).success(function(response) { 
      $scope.error = "welcome"; 
      $rootScope.currentUser = data; 
      session.set('siUser', data); 
      $location.path('/dash'); 
     }).error(function(reason) { 
      $scope.error = "failed try again" + $scope.info.p + ' ' + $scope.info.u; 
     }); 
    }; 

Вы сможете получить angular.element так:

angular.element($event.target); 

Позвольте мне знать, если это решение подходит вам

+0

есть ли решение без взлома html? – Zalaboza

+0

Боюсь, что нет. Но этот метод не так хакен, это просто событие. Если вы используете контроллер, нет никакого способа получить элемент для jQuery или document.querySelector() ;. Вы можете сделать пользовательскую директиву и использовать это вместо ngSubmit. Я думаю, что это самый чистый способ получить элемент. –

+0

Создание настраиваемой директивы для управления элементом - лучшая практика. Угловые лучшие практики говорят о том, что работать с DOM вне директив (например, через контроллер) нехорошо. Вот почему не существует «нехитрый» способ получить элемент, потому что контроллеры не рассматривали эту логику. –

Смежные вопросы