validation issues fixed

This commit is contained in:
Misko Hevery 2010-04-16 17:03:06 -07:00
parent deb86fe357
commit 6470b48ce0
5 changed files with 30 additions and 11 deletions

13
angular-debug.js vendored
View file

@ -2839,7 +2839,7 @@ foreach({
element.removeClass('ng-input-indicator-wait');
scope.$invalidWidgets.markValid(element);
}
element.data('$validate')(input);
element.data('$validate')();
scope.$root.$eval();
});
} else if (inputState.inFlight) {
@ -3202,6 +3202,11 @@ function valueAccessor(scope, element) {
required = required || required === '';
if (!validator) throw "Validator named '" + validatorName + "' not found.";
function validate(value) {
var force = false;
if (isUndefined(value)) {
value = element.val();
force = true;
}
if (element[0].disabled || isString(element.attr('readonly'))) {
elementError(element, NG_VALIDATION_ERROR, null);
invalidWidgets.markValid(element);
@ -3211,8 +3216,8 @@ function valueAccessor(scope, element) {
validateScope = extend(new (extend(function(){}, {prototype:scope}))(), {$element:element});
error = required && !trim(value) ?
"Required" :
validator({state:validateScope, scope:{get:validateScope.$get, set:validateScope.$set}}, value);
if (error !== lastError) {
(trim(value) ? validator({state:validateScope, scope:{get:validateScope.$get, set:validateScope.$set}}, value) : null);
if (error !== lastError || force) {
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
if (error)
@ -3621,14 +3626,12 @@ angularService('$route', function(location, params){
}
};
function updateRoute(){
console.log('updating route');
var childScope;
$route.current = null;
angular.foreach(routes, function(routeParams, route) {
if (!childScope) {
var pathParams = matcher(location.hashPath, route);
if (pathParams) {
console.log('new route', routeParams.template, location.hashPath, location.hash);
childScope = angular.scope(parentScope);
$route.current = angular.extend({}, routeParams, {
scope: childScope,

View file

@ -165,14 +165,12 @@ angularService('$route', function(location, params){
}
};
function updateRoute(){
console.log('updating route');
var childScope;
$route.current = null;
angular.foreach(routes, function(routeParams, route) {
if (!childScope) {
var pathParams = matcher(location.hashPath, route);
if (pathParams) {
console.log('new route', routeParams.template, location.hashPath, location.hash);
childScope = angular.scope(parentScope);
$route.current = angular.extend({}, routeParams, {
scope: childScope,

View file

@ -117,7 +117,7 @@ foreach({
element.removeClass('ng-input-indicator-wait');
scope.$invalidWidgets.markValid(element);
}
element.data('$validate')(input);
element.data('$validate')();
scope.$root.$eval();
});
} else if (inputState.inFlight) {

View file

@ -27,6 +27,11 @@ function valueAccessor(scope, element) {
required = required || required === '';
if (!validator) throw "Validator named '" + validatorName + "' not found.";
function validate(value) {
var force = false;
if (isUndefined(value)) {
value = element.val();
force = true;
}
if (element[0].disabled || isString(element.attr('readonly'))) {
elementError(element, NG_VALIDATION_ERROR, null);
invalidWidgets.markValid(element);
@ -36,8 +41,8 @@ function valueAccessor(scope, element) {
validateScope = extend(new (extend(function(){}, {prototype:scope}))(), {$element:element});
error = required && !trim(value) ?
"Required" :
validator({state:validateScope, scope:{get:validateScope.$get, set:validateScope.$set}}, value);
if (error !== lastError) {
(trim(value) ? validator({state:validateScope, scope:{get:validateScope.$get, set:validateScope.$set}}, value) : null);
if (error !== lastError || force) {
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
if (error)

View file

@ -60,7 +60,7 @@ describe("input widget", function(){
expect(scope.$element[0].checked).toEqual(false);
});
it("should process ng-validation", function(){
it("should process ng-validate", function(){
compile('<input type="text" name="price" value="abc" ng-validate="number"/>');
expect(element.hasClass('ng-validation-error')).toBeTruthy();
expect(element.attr('ng-validation-error')).toEqual('Not a number');
@ -76,6 +76,19 @@ describe("input widget", function(){
expect(element.attr('ng-validation-error')).toEqual('Not a number');
});
it("should not call validator if undefinde/empty", function(){
var lastValue = "NOT_CALLED";
angularValidator.myValidator = function(value){lastValue = value;};
compile('<input type="text" name="url" ng-validate="myValidator"/>');
expect(lastValue).toEqual("NOT_CALLED");
scope.url = 'http://server';
scope.$eval();
expect(lastValue).toEqual("http://server");
delete angularValidator.myValidator;
});
it("should ignore disabled widgets", function(){
compile('<input type="text" name="price" ng-required disabled/>');
expect(element.hasClass('ng-validation-error')).toBeFalsy();