Контроллер AngularJS бесконечно запускается

421
13 марта 2017, 10:43

Моя проблема заключается в том, что при попытке настройки маршрутизации стандартного проекта ASP.NET MVC и AngularJS, а именно "Вход/Регистрация", при нажатии на ссылку происходит бесконечный запуск angular-контроллера, что ведет к зависанию браузера.

AAngScript.js

(function () {
var AAngScript = angular.module('AAngScript', ['ngRoute']);
/* some stuff */
function RegisterController ($location, RegistrationFactory) {
    // vm as in view-model
    var vm = this;
    vm.registerForm = {
        emailAdress: '',
        password: '',
        confirmPassword: '',
        registrationFailure: false
    };
    vm.register = function () {
        var result = RegistrationFactory($scope.registerForm.emailAdress, $scope.registerForm.password, $scope.registerForm.confirmPassword);
        result.then(function (result) {
            if (result.success) {
                $location.path('/routeOne');
            } else {
                $scope.registerForm.registrationFailure = true;
            }
        });
    }
}
//some stuff
function RegistrationFactory($http, $q) {

    return function(emailAdress, password, rememberMe) {
        var deferredObject = $q.defer();
        $http.post(
            '/Account/Register', {
                Email: emailAdress,
                Password: password,
                ConfirmPassword: confirmPassword
            }
            ).
        success(function (data) {
            if (data == "True") {
                deferredObject.resolve({ success: true });
            } else {
                deferredObject.resolve({ success: false });
            }
        }).
        error(function () {
            deferredObject.resolve({ success: false });
        });
        return deferredObject.promise;
    }
};
//some stuff
})();

Частичное представление _Layout.cshtml:

<!DOCTYPE html>
<html ng-app="AAngScript">
<head>
.....
</head>
<body>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    <script src="~/Scripts/angular.min.js"></script>
    <script src="~/Scripts/angular-route.min.js"></script>
    <script src="~/Scripts/AAngScript.js"></script>
...
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="/#!/login">Log In</a></li>
                    <li><a href="/#!/register">Register</a></li>
                </ul>
...
    <div class="container body-content">
        @RenderBody()
        <div ng-view></div>
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

Register.cshtml:

<div class="row">
    <form ng-submit="register()">
        <div class="form-group">
            <label for="emailAdress">Email</label>
            <input id="emailAdress" type="email" ng-model="registerForm.emailAdress" required pattern="{6,30}" autofocus/>
        </div>
        <div class="form-group">
            <label for="password">Password</label>
            <input id="password" type="password" ng-model="registerForm.password" required pattern="{6,30}" />
        </div>
        <div class="form-group">
            <label for="confirmPassword">Confirm password</label>
            <input id="confirmPassword" type="password" ng-model="registerForm.confirmPassword" required pattern="{6,30}" />
        </div>
        <div class="form-group">
            <input type="submit" value="Register" class="btn btn-success" />
        </div>
    </form>
</div>

AccountController.cs:

//
[AllowAnonymous]
public ActionResult Register()
{
    return View();
}
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
public async Task<bool> Register(RegisterViewModel model)
{
    var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    var result = await UserManager.CreateAsync(user, model.Password);
    if (!result.Succeeded) return false;
    await SignInManager.SignInAsync(user, false, false);
    return true;
}

AAngScript.js сделан в соответствии с этим гайдом. Дебаг в браузере показывает, что постоянно запускается RegisterController, что вызывает ошибку вида: Error: too much recursion, но я никак не могу понять, как ограничить вызов контроллера только одним разом.

READ ALSO
Как выделить активную ссылку в меню?

Как выделить активную ссылку в меню?

Сейчас добавляется active, если находишься в категории siteru/closed/,

373
JQuery поиск обработчика события объекта

JQuery поиск обработчика события объекта

Мне нужно найти, какие обработчики событий записаны на объекте

288
Какая технология используется?

Какая технология используется?

Добрый вечер, подскажите какая технология используется для открытия изображения https://unsplashcom/new По клику на фото открывается фото в полном...

405