Друзья, есть такая директива (нагло взята на github ):
(function() {
"use strict";
angular.module('app.common').directive('match', passwordVerify);
function passwordVerify ($parse) {
return {
require: '?ngModel',
restrict: 'A',
link: function(scope, elem, attrs, ctrl) {
var matchGetter = $parse(attrs.match);
var caselessGetter = $parse(attrs.matchCaseless);
var noMatchGetter = $parse(attrs.notMatch);
scope.$watch(getMatchValue, function(){
ctrl.$$parseAndValidate();
});
ctrl.$validators.match = function(){
var match = getMatchValue();
var notMatch = noMatchGetter(scope);
var value;
if(caselessGetter(scope)){
value = angular.lowercase(ctrl.$viewValue) === angular.lowercase(match);
}else{
value = ctrl.$viewValue === match;
}
value ^= notMatch;
return !!value;
};
function getMatchValue(){
var match = matchGetter(scope);
if(angular.isObject(match) && match.hasOwnProperty('$viewValue')){
match = match.$viewValue;
}
return match;
}
}
};
}
})();
Но меня завернули на пулл реквесте с обоснованием, что $parse == eval. Но 99% директив используют парс когда надо сравнить 2 поля.