AngularJS alert alert-success не показывает div успеха в то время, когда функция отвечает успешно - PullRequest
0 голосов
/ 16 ноября 2018

Ниже приведен HTML-код для пользователей, чтобы ввести свой адрес электронной почты и идентификатор студента:

<div id="statusScope" class="pos-rel" style="margin:0 auto 50px;" ng-controller="statusController">
  <form class="form-inline text-center" action="">
    <div class="form-group">
      <label for="email">Email address:</label>
      <input type="email" class="form-control" id="email" ng-model="email">
    </div>
    <div class="form-group">
      <label for="sID">Student ID:</label>
      <input type="text" class="form-control" id="sID" ng-model="sID">
    </div>
  <br/>
  <br/>
    <button type="button" class="btn btn-primary" ng-click="emailCheck()">E-mail Check</button>
  </form>
  <div class="alert alert-success" ng-if="msg.success">{{msg.success}}</div>
  <!-- <div class="col-lg-12 col-sm-12 col-xs-12 alert alert-success ng-hide" ng-show="isDisplay"><strong>{{msg.success}}</strong></div> -->

  <div class="alert alert-danger" ng-if="msg.noStudent">{{msg.noStudent}}</div>
  <br>
</div>

Ниже приведен код, который проверяет адрес электронной почты и идентификатор студента и возвращает успех, если оба они верны, в противном случае возвращает «неправильные данные», если данные не совпадают.

$scope.emailCheck = function() {
            var _to = $scope.email,
                    _studentID = $scope.sID,
                    _subject = "System Notify.",
                    // _file1 = student[0].tfile1,
                    _msg = "Hello, "+_to+". \r\n"+"Your course enrollment application status is " + "$('#status').val()" + ". \r\n";
                    // _file1 = "Your file 1 is "+_tfile1+". \r \n "+ +"$('#tfile1').val()"+ ".";

            var all = [].concat($scope.users.cis300, $scope.users.cis400, $scope.users.cis500);

            var student = all.filter(function(item) {
                return item.email == _to && item.studentid == _studentID;
            });

if(student && student.length) {
                    var _file1 = student[0].tfile;
                    var _file2 = student[0].tfile1;
                    var _file3 = student[0].tfile2;
                    _msg = "Hello, "+student[0].firstname+" "+student[0].middlename+". "+student[0].lastname+". \r\n"+"Your status is " + student[0].status + ". \r\n",
                    // _file1 = student[0].tfile1;
                    console.log(_file1);
                    console.log(_file2);
                    console.log(_file3);
                    console.log(_to);
                    $scope.msg = {};
                    $.post('php/mail.php', 
                    JSON.stringify({
                            'to': _to,
                            'subject': _subject,
                            'file1': _file1,
                            'file2': _file2,
                            'file3': _file3,
                            'msg': _msg

                    }),

                function(response, status) {    
                    console.log(_status);
                    $scope.isDisplay = true;
                        $scope.msg.success = "Success! Check your Email";
                    });
                } else {
                    $scope.msg = {};
                    $scope.msg.noStudent = "Email or Student ID is incorrect.";
                }

Когда я ввожу неправильные данные, я сразу получаю «Идентификатор студента или адрес электронной почты неверен», но когда я ввожу правильные данные, электронное письмо отправляется пользователю, но оно не выдает предупреждение об успехе. , Он показывает мне предупреждение об успехе только после того, как я что-то наберу или внесу некоторые изменения в поле Email или Student ID.

1 Ответ

0 голосов
/ 16 ноября 2018

Разрешение обещания находится вне цикла дайджеста, поэтому Angular не видит изменений, которые вы вносите в $scope, пока что-то еще не запустит цикл дайджеста.Вам нужно обернуть изменения в $scope.$apply(), чтобы форсировать цикл дайджеста и позволить Angular просмотреть изменения и обновить представление.

function(response, status) {
    console.log(_status);
    $scope.$apply(function() {
        $scope.isDisplay = true;
        $scope.msg.success = "Success! Check your Email";
    });
} else { [...]
...