Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Инициализация контроллера: повышение читабельности кода (https://javascript.ru/forum/angular/44583-inicializaciya-kontrollera-povyshenie-chitabelnosti-koda.html)

EgorKluch 25.01.2014 09:37

Инициализация контроллера: повышение читабельности кода
 
Добрый день, форумчане! Помогите сделать код более читабельным)

Длинные цепочки для доступа к аттрибуту усложняют читабельность значительно, и это осложняет жизнь.

Я привожу код, который не работает. Потому что, когда вызывается функция инициализации контроллера, $scope.signUpForm === undefined (как и $scope.user).

Как мне инициализировать контроллер так, что бы не писать портянку в checkRepeatePassword, но задать signUpForm и user до вызова метода как в примере?

<html ng-app="app">
<div ng-controller="SignUpCtrl">
   <form novalidate name="signUpForm">
      <input type="password" ng-change="checkRepeatePassword"
             required ng-model="user.password" name="password"><br>
      <input type="password" ng-change="checkRepeatePassword"
             required ng-model="user.repeatPassword" name="repeatPassword">
   </form>
</div>
</html>


var app = angular.module('app', []);

app.controller('SignUpCtrl', ['$scope', '$http', function($scope, $http) {
   var user = $scope.user;
   var signUpForm = $scope.signUpForm;
   var repatePasswordInput = signUpForm.repeatePassword;
   var passwordInput = signUpForm.password;

   $scope.checkRepeatePassword = function() {
      if (repeatPasswordInput.$pristine) return;

      var error = user.repeatPassword === user.password;
      signUpForm.$error.repeatPassword = error;
      repeatePasswordInput.$error.repeatPassword = error;
   };
});


P.S.: Если кто подскажет более красивое решение валидации паролей, буду еще больше благодарен))

Shitbox2 28.01.2014 18:31

Зачем проверять совпадение паролей при каждом клике, если это можно делать при отправке формы?

Если зачем-то нужна такая интерактивность стоит написать отдельную директиву и добавить в нг-модель свой парсер


Часовой пояс GMT +3, время: 08:55.