Метод AngularJS в контроллере, назначенный Div, не работает

0

У меня есть форма входа в страницу, у нее есть собственный контроллер для обработки функции входа в систему, но по какой-то причине функция входа в систему не запускается при отправке формы.

Форма в файле большего размера:

<div class="login-wrap" ng-controller="LoginCtrl as logincontrol">

        <form ng-class="{submited: submited}" class="form-login" novalidate name="loginForm" x-ng-submit="logincontrol.login()">

            <div class="form-group" ng-class="{errorEmail: loginForm.email.$error.required || loginForm.email.$error.email}">
                <input type="email" name="email" id="email" class="form-control login-form-input" placeholder="{{'Email' | translate}}" x-ng-model="username" required>
            </div>

            <div class="form-group" ng-class="{errorPassword: loginForm.password.$error.required}">
                <input type="password" id="password" name="password" class="form-control login-form-input" placeholder="{{'Password' | translate}}" x-ng-model="password" required>
            </div>

            <div class="text-center">
                <button class="btn btn-success login-button" type="submit" translate>SIGN IN</button>
            </div>

        </form>

</div>

Контроль входа:

angular.module('services.security')
    .controller('LoginCtrl', function ($scope, securityService, $rootScope) {
        $scope.messages = {
            error: false
        };

        console.log("HERE");

        $scope.submited = false;

        $scope.loading = false;

        var validateEmail = function( email ) {
            var pattern = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

            return email.match( pattern );
        };

        $scope.login = function() {
            console.log("clicked");

            $scope.submited = true;

            if ( !$scope.loginForm.email.$viewValue ) {
                $scope.loginForm.email.$dirty = true;
                $scope.loginForm.email.$invalid = true;
                $scope.loginForm.email.$error.required = true;
            }

            if ( !$scope.loginForm.password.$viewValue ) {
                $scope.loginForm.password.$dirty = true;
                $scope.loginForm.password.$invalid = true;
                $scope.loginForm.password.$error.required = true;
            }

            if ( validateEmail($scope.loginForm.email.$viewValue) ) {
                if ( $scope.loginForm.$valid ) {
                    $scope.messages.error = false;
                    $scope.loading = true;

                    securityService.login($scope.loginForm.email.$viewValue, $scope.loginForm.password.$viewValue).then(function() {
                        $scope.loading = false;
                    }, function(data) {
                        console.log(data)
                        $scope.loading = false;;
                    });
                }
            } else {

                if ( $scope.loginForm.email.$viewValue ){
                    $scope.loginForm.email.$dirty = true;
                    $scope.loginForm.email.$invalid = true;
                    $scope.loginForm.email.$error.email = true;
                }
            }

        };
    });

Когда загружается HERE входа в систему, HERE печатается на консоли, поэтому контроллер загружается, однако функция регистрации не срабатывает при отправке формы (т. clicked не печатается).

1 ответ

0
Лучший ответ

Вы создаете экземпляр, указав LoginCtrl as logincontrol в своем HTML-коде.

Если вы хотите использовать переменную $scope просто укажите ng-controller="LoginCtrl"

или

Замените $scope this

Angular определяет это в своей документации, которая гласит:

Ниже приведены два разных стиля декларации:

  • один связывает методы и свойства непосредственно с контроллером, используя this: ng-controller="SettingsController1 as settings"
  • один вводит $scope в контроллер: ng-controller="SettingsController2"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню