diff options
Diffstat (limited to 'src/widgets.js')
| -rw-r--r-- | src/widgets.js | 15 |
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) { |
