diff options
| author | Shyam Seshadri | 2010-06-02 17:13:10 -0700 | 
|---|---|---|
| committer | Shyam Seshadri | 2010-06-02 17:13:10 -0700 | 
| commit | 3245209bdb9e656622756220c5bbeb80d3ae2eac (patch) | |
| tree | 749eaca3bf88bf2389f9bee8f17af43e5f6fdd89 | |
| parent | 39312d1fe3a27b248f98f6f26577fcd7e2c64f85 (diff) | |
| download | angular.js-3245209bdb9e656622756220c5bbeb80d3ae2eac.tar.bz2 | |
Add ability to add conditions to ng-required
| -rw-r--r-- | src/widgets.js | 11 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 23 | 
2 files changed, 31 insertions, 3 deletions
diff --git a/src/widgets.js b/src/widgets.js index 09d743e9..42d56e20 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -35,16 +35,21 @@ 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 { diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index 17120682..dc6050b8 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -221,6 +221,29 @@ describe("widget", function(){        expect(element.attr('ng-validation-error')).toEqual('Required');      }); +    it('should allow conditions on ng-required', function() { +      compile('<input type="text" name="price" ng-required="ineedz"/>'); +      scope.$set('ineedz', false); +      scope.$eval(); +      expect(element.hasClass('ng-validation-error')).toBeFalsy(); +      expect(element.attr('ng-validation-error')).toBeFalsy(); + +      scope.$set('price', 'xxx'); +      scope.$eval(); +      expect(element.hasClass('ng-validation-error')).toBeFalsy(); +      expect(element.attr('ng-validation-error')).toBeFalsy(); + +      scope.$set('ineedz', true); +      scope.$eval(); +      expect(element.hasClass('ng-validation-error')).toBeFalsy(); +      expect(element.attr('ng-validation-error')).toBeFalsy(); + +      element.val(''); +      element.trigger('keyup'); +      expect(element.hasClass('ng-validation-error')).toBeTruthy(); +      expect(element.attr('ng-validation-error')).toEqual('Required'); +    }); +      it("should process ng-required2", function() {        compile('<textarea name="name">Misko</textarea>');        expect(scope.$get('name')).toEqual("Misko");  | 
