2015-03-15 2 views
0

У меня есть функция, которая выполняется при отправке моей формы html, если при обработке формы на сервере возникают ошибки, то ошибки возвращаются как json. Я хочу показать эти ошибки пользователю, но по какой-то причине ng-show на моем контейнере div div никогда не отображается.Угловое js ng-show не работает должным образом

Html код:

<form class="form-horizontal" role="form" name="registerForm" ng-controller="RegisterController as register" ng-submit="registerForm.$valid && register()" novalidate> 
     <div class="form-group"> 
      <div class="col-md-3"> 
       <label for="email">Email: </label> 
      </div> 

      <div class="col-md-9"> 
       <input type="email" id="email" name="email" ng-model="d.email" class="form-control" ng-required/> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-3"> 
       <label for="password">Password</label> 
      </div> 

      <div class="col-md-9"> 
       <input type="password" id="password" name="password" ng-model="d.password" class="form-control" ng-required/> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-3"> 
       <label for="confPassword">Confirm Password</label> 
      </div> 

      <div class="col-md-9"> 
       <input type="password" id="password_confirmation" name="password_confirmation" ng-model="d.password_confirmation" nx-equal-ex="d.password" class="form-control" ng-required/> 
      </div> 
     </div> 

     <span class="help-block errorMessages" ng-show="d.errors.length"> 
      <div class="alert alert-danger"> 
       <strong>Whoops!</strong> There were some problems with your input.<br><br> 
       <ul class="list"> 
        <li ng-repeat="error in d.errors"><% error %></li> 
       </ul> 
      </div> 
     </span> 

     <div class="form-group"> 
      <div class="col-md-12"> 
       <br/> 
       <hr> 
       <button class="big-red-button" type="submit">Register <i class="glyphicon glyphicon-chevron-right"></i></button> 
      </div> 
     </div> 
    </form> 

Register.js Контроллер:

(function() { 

    angular.module('vendor').controller('RegisterController', ['$http', '$scope', function($http, $scope) { 

     $scope.d = {}; 
     $scope.d.errors = {}; 

     $scope.register = function() { 

      $.ajax({ 
       type: "POST", 
       url: "/auth/register", 
       headers : { 
        'X-XSRF-Token': $("meta[name='csrf_token']").attr("content") 
       }, 
       data: { 
        email: $scope.d.email, 
        password: $scope.d.password, 
        password_confirmation: $scope.d.password_confirmation 
       }, 
       dataType: 'json', 
       success: function(data) { 
        alert(result[0]); 
       }, 
       error: function(xhr, status, err) { 
        var responseJSON = JSON.parse(xhr.responseText); 
        $scope.d.errors = responseJSON; 
        //alert($scope.d.errors.name); 

       } 
      }); 
     }; 

    }]); 

})(); 

Ничего не происходит, когда ошибки возвращаются на страницу, нг-шоу не отображается код.

+0

длина всегда существует, поэтому, вам необходимо указать что-то вроде 'нг-шоу =" d .errors.length> 0 ", если ничего не сохраняется в ошибке раньше. –

+0

попробовал, что он не работает – user3718908

+1

, тогда используйте 'ng-show =" d.errors! == undefined "' –

ответ

0

Использование привязки данных для отображения ошибок:

<ul class="list"> 
<li ng-repeat="error in d.errors"><% error %>{{error}}</li> 
</ul> 
+0

Мне жаль, Понимаете, это похоже на то, что у меня уже есть в моем коде. – user3718908

+0

Как вы выполняете привязку данных в представлении? К этому только <% error %>? Не могли бы вы использовать {{error}} – Besa

+0

Я изменил его на <% %>, потому что он противоречил моему larvel blade tempate – user3718908

0

Я мог бы быть неправильно, но $ .ajax является JQuery? Если это так,

Все, что находится за пределами углового юниверса, должно запускать цикл дайджеста вручную.

Итак, у вас есть два варианта.

после $ scope.d.errors = responseJSON добавить

$scope.$apply(); 

Или используйте $http

$http.post({ 
    type: "POST", 
    url: "/auth/register", 
    headers : { 
    'X-XSRF-Token': $("meta[name='csrf_token']").attr("content") 
    }, 
    data: { 
    email: $scope.d.email, 
    password: $scope.d.password, 
    password_confirmation: $scope.d.password_confirmation 
    } 
}).success(
    function(data) { 
    alert(data[0]); 
    } 
).error(function(err, status, headers, conf) { 
    $scope.d.errors = data; 
    //alert($scope.d.errors.name); 
}); 
+0

$ scope. $ Apply() didn ' t и имеет совершенно другую проблему при использовании $ http, поэтому я переключился на $ ajax – user3718908

+1

$ scope. $ apply() должен обновлять обновление вашего dom, как и ожидалось. Вы пробовали этот фрагмент $ http? Не тестировал его, но он должен работать. – goreorto

+0

Он отлично работает, когда я использую $ http.post, моя проблема с ним заключалась в том, что ответ всегда оказался html-страницей вместо json, просто потому, что проверка laravel проверяет запрос страницы, если это ajax-запрос возвращает объект json, если нет, то он перенаправляет. – user3718908

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