mag*_*.77 2 angularjs angularjs-directive
我正在构建一个自定义指令来匹配两个输入字段.所以使用ctrl.$parsers.unshift抛出一个错误Cannot read property 'unshift' of undefined.无法弄清楚出了什么问题.顺便说一句,我正在使用Angular Material Input Fields.
<md-input-container>
<label>E-Mail</label>
<input required type="email" name="clientEmail" ng-model="user.clientEmail"
minlength="10" maxlength="100" ng-pattern="/^.+@.+\..+$/" />
<div ng-messages="registerForm.clientEmail.$error" role="alert">
<div ng-message-exp="['required', 'minlength', 'maxlength', 'pattern']">
Your email must be between 10 and 100 characters long and look like an e-mail address.
</div>
</div>
</md-input-container>
<md-input-container>
<label>E-Mail wiederholen</label>
<input required type="email" name="clientEmailconfirm" ng-model="user.clientEmailconfirm"
minlength="10" maxlength="100" ng-pattern="/^.+@.+\..+$/" field-match="{{user.clientEmail}}" />
<div ng-messages="registerForm.clientEmailconfirm.$error" role="alert">
<div ng-message-exp="['required', 'minlength', 'maxlength', 'pattern']">
Your email must be between 10 and 100 characters long and look like an e-mail address.
</div>
<div ng-message="fieldMatch">E-Mail do not Match...</div>
</div>
</md-input-container>
Run Code Online (Sandbox Code Playgroud)
指示:
angular.module('fieldmatcher', []);
app.directive('fieldMatch', ['$rootScope', '$compile', '$parse', function($rootScope, $compile, $parse) {
return {
require: ['ngModel'],
restrict: 'A',
scope: true,
link: function(scope, element, attr, ctrl) {
ctrl.$parsers.unshift(validate);
ctrl.$formatters.push(validate);
var validate = function(viewValue) {
var comparisonModel = attr.fieldMatch;
if (!viewValue || !comparisonModel) {
ctrl.$setValidity('fieldMatch', true);
}
ctrl.$setValidity('fieldMatch', (viewValue === comparisonModel));
return viewValue;
};
attr.$observe('fieldMatch', function(comparisonModel) {
return validate(ctrl.$viewValue);
});
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |