aboutsummaryrefslogtreecommitdiffstats
path: root/src/widgets.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets.js')
-rw-r--r--src/widgets.js15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/widgets.js b/src/widgets.js
index 43bed81f..5df92de0 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -35,16 +35,23 @@ function compileValidator(expr) {
function valueAccessor(scope, element) {
var validatorName = element.attr('ng-validate') || NOOP,
validator = compileValidator(validatorName),
- required = element.attr('ng-required'),
+ requiredExpr = element.attr('ng-required'),
farmatterName = element.attr('ng-format') || NOOP,
formatter = angularFormatter(farmatterName),
- format, parse, lastError;
+ format, parse, lastError, required;
invalidWidgets = scope.$invalidWidgets || {markValid:noop, markInvalid:noop};
if (!validator) throw "Validator named '" + validatorName + "' not found.";
if (!formatter) throw "Formatter named '" + farmatterName + "' not found.";
format = formatter.format;
parse = formatter.parse;
- required = required || required === '';
+ if (requiredExpr) {
+ scope.$watch(requiredExpr, function(newValue) {
+ required = newValue;
+ validate();
+ });
+ } else {
+ required = requiredExpr === '';
+ }
element.data('$validate', validate);
return {
@@ -80,7 +87,7 @@ function valueAccessor(scope, element) {
validateScope = extend(new (extend(function(){}, {prototype:scope}))(), {$element:element});
error = required && !value ?
"Required" :
- (value ? validator({state:validateScope, scope:{get:validateScope.$get, set:validateScope.$set}}, value) : null);
+ (value ? validator(validateScope, value) : null);
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
if (error) {