mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-23 01:40:25 +00:00
Add ability to add conditions to ng-required
This commit is contained in:
parent
39312d1fe3
commit
3245209bdb
2 changed files with 31 additions and 3 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Reference in a new issue