Может ли кто-нибудь объяснить, как работает этот пароль? Я просмотрел документы, но смутился с контроллером require:ngModel
.Проверка соответствия паролей в угловых js
Внутри сценария, чем эти три линии означают:
- вар originalModel = $ синтаксического анализа (attrs.valueMatches),
- secondModel = $ синтаксического анализа (attrs.ngModel);
- ngModel. $ SetValidity (attrs.name, newValue === secondModel (scope));
Это attrs.ngModel
здесь, ссылаясь на контроллер ngModel или на директиву?
Есть attrs.ngModel
выбор атрибутов первого поля ввода или подтверждение ввода пароля?
attrs.name
- Я не вижу никакого атрибута name
в коде.
<!DOCTYPE html>
<html ng-app="myApp" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script>
"use strict";
var app = angular.module('myApp', [])
app.directive('valueMatches', ['$parse', function ($parse) {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ngModel) {
var originalModel = $parse(attrs.valueMatches),
secondModel = $parse(attrs.ngModel);
// Watch for changes to this input
scope.$watch(attrs.ngModel, function (newValue) {
ngModel.$setValidity(attrs.name, newValue === originalModel(scope));
});
// Watch for changes to the value-matches model's value
scope.$watch(attrs.valueMatches, function (newValue) {
ngModel.$setValidity(attrs.name, newValue === secondModel(scope));
});
}
};
}]);
</script>
<title>Registration Form</title>
</head>
<body>
<div class="container">
<h2 class="text-muted">Registration form</h2>
<div>
<form name="myForm" action="RegistrationServlet.do" method="POST" novalidate>
First name:<input type="text" class="form-control input-sm" name="uname" ng-pattern="/^[a-zA-Z]{3,20}/" ng-model="uname" placeholder="First Name" required/>
Password:<input type="password" class="form-control input-sm glyphicon glyphicon-ok" name="pwd" ng-model="pwd" required />
Confirm Password: <input type="password" class="form-control input-sm glyphicon glyphicon-ok" name="pwd2" ng-model="pwd2" value-matches="pwd" required/>
<span class="help-block" style="color:red" ng-show="myForm.pwd2.$dirty && myForm.pwd2.$invalid">Passwords did not match<br></span><br>
</form>
</div>
</div>
</body>
</html>
http://plnkr.co/edit/zCxRp71SICuYp1JDm3pY?p=preview
Я не понимаю, когда вы сказали «все ngModel-х и ATTRS в директивах являются локальными» –
'ATTRS. name' вот имя правителя валидатора? Поэтому я могу дать любое имя вместо 'attrs.name'? –
То, что я имел в виду под локальным, - это когда-либо элемент (в этом случае '', который определен с помощью директивы (в этом случае используется атрибут 'value-matches =' генерирует новую уникальную область выделения, уникальную для себя. Таким образом, единственная ngModel it ссылка ссылается на то, что связано с самим собой. Причина, по которой вам нужно: ngModel для прямого ввода, так что вы можете наследовать все угловые функциональные возможности, связанные с ngModel. –