TEMP - trying to remove watches to figure out the angular infinite digest loop
This commit is contained in:
@@ -44,34 +44,34 @@ function valFormManager(serverValidationManager, $rootScope, $log, $timeout, not
|
||||
},
|
||||
link: function (scope, element, attr, formCtrl) {
|
||||
|
||||
//watch the list of validation errors to notify the application of any validation changes
|
||||
scope.$watch(function () {
|
||||
//the validators are in the $error collection: https://docs.angularjs.org/api/ng/type/form.FormController#$error
|
||||
//since each key is the validator name (i.e. 'required') we can't just watch the number of keys, we need to watch
|
||||
//the sum of the items inside of each key
|
||||
////watch the list of validation errors to notify the application of any validation changes
|
||||
//scope.$watch(function () {
|
||||
// //the validators are in the $error collection: https://docs.angularjs.org/api/ng/type/form.FormController#$error
|
||||
// //since each key is the validator name (i.e. 'required') we can't just watch the number of keys, we need to watch
|
||||
// //the sum of the items inside of each key
|
||||
|
||||
//get the lengths of each array for each key in the $error collection
|
||||
var validatorLengths = _.map(formCtrl.$error, function (val, key) {
|
||||
return val.length;
|
||||
});
|
||||
//sum up all numbers in the resulting array
|
||||
var sum = _.reduce(validatorLengths, function (memo, num) {
|
||||
return memo + num;
|
||||
}, 0);
|
||||
//this is the value we watch to notify of any validation changes on the form
|
||||
return sum;
|
||||
}, function (e) {
|
||||
scope.$broadcast("valStatusChanged", { form: formCtrl });
|
||||
// //get the lengths of each array for each key in the $error collection
|
||||
// var validatorLengths = _.map(formCtrl.$error, function (val, key) {
|
||||
// return val.length;
|
||||
// });
|
||||
// //sum up all numbers in the resulting array
|
||||
// var sum = _.reduce(validatorLengths, function (memo, num) {
|
||||
// return memo + num;
|
||||
// }, 0);
|
||||
// //this is the value we watch to notify of any validation changes on the form
|
||||
// return sum;
|
||||
//}, function (e) {
|
||||
// scope.$broadcast("valStatusChanged", { form: formCtrl });
|
||||
|
||||
//find all invalid elements' .control-group's and apply the error class
|
||||
var inError = element.find(".control-group .ng-invalid").closest(".control-group");
|
||||
inError.addClass("error");
|
||||
// //find all invalid elements' .control-group's and apply the error class
|
||||
// var inError = element.find(".control-group .ng-invalid").closest(".control-group");
|
||||
// inError.addClass("error");
|
||||
|
||||
//find all control group's that have no error and ensure the class is removed
|
||||
var noInError = element.find(".control-group .ng-valid").closest(".control-group").not(inError);
|
||||
noInError.removeClass("error");
|
||||
// //find all control group's that have no error and ensure the class is removed
|
||||
// var noInError = element.find(".control-group .ng-valid").closest(".control-group").not(inError);
|
||||
// noInError.removeClass("error");
|
||||
|
||||
});
|
||||
//});
|
||||
|
||||
//This tracks if the user is currently saving a new item, we use this to determine
|
||||
// if we should display the warning dialog that they are leaving the page - if a new item
|
||||
|
||||
@@ -16,7 +16,7 @@ function valPropertyMsg(serverValidationManager) {
|
||||
replace: true,
|
||||
restrict: "E",
|
||||
template: "<div ng-show=\"errorMsg != ''\" class='alert alert-error property-error' >{{errorMsg}}</div>",
|
||||
|
||||
scope: {},
|
||||
link: function (scope, element, attrs, ctrl) {
|
||||
|
||||
//the property form controller api
|
||||
@@ -28,7 +28,7 @@ function valPropertyMsg(serverValidationManager) {
|
||||
//the tabbed content controller api
|
||||
var tabbedContent = ctrl[3];
|
||||
|
||||
var currentProperty = umbPropCtrl.property;
|
||||
scope.currentProperty = umbPropCtrl.property;
|
||||
var currentCulture = tabbedContent.content.language.culture;
|
||||
|
||||
var watcher = null;
|
||||
@@ -36,16 +36,16 @@ function valPropertyMsg(serverValidationManager) {
|
||||
// Gets the error message to display
|
||||
function getErrorMsg() {
|
||||
//this can be null if no property was assigned
|
||||
if (currentProperty) {
|
||||
if (scope.currentProperty) {
|
||||
//first try to get the error msg from the server collection
|
||||
var err = serverValidationManager.getPropertyError(currentProperty.alias, null, "");
|
||||
var err = serverValidationManager.getPropertyError(scope.currentProperty.alias, null, "");
|
||||
//if there's an error message use it
|
||||
if (err && err.errorMsg) {
|
||||
return err.errorMsg;
|
||||
}
|
||||
else {
|
||||
//TODO: localize
|
||||
return currentProperty.propertyErrorMessage ? currentProperty.propertyErrorMessage : "Property has errors";
|
||||
return scope.currentProperty.propertyErrorMessage ? scope.currentProperty.propertyErrorMessage : "Property has errors";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,33 +61,31 @@ function valPropertyMsg(serverValidationManager) {
|
||||
// the form. Of course normal client-side validators will continue to execute.
|
||||
function startWatch() {
|
||||
//if there's not already a watch
|
||||
if (!watcher) {
|
||||
watcher = scope.$watch(function () {
|
||||
return currentProperty.value;
|
||||
}, function (newValue, oldValue) {
|
||||
//if (!watcher) {
|
||||
// watcher = scope.$watch("currentProperty.value", function (newValue, oldValue) {
|
||||
|
||||
if (!newValue || angular.equals(newValue, oldValue)) {
|
||||
return;
|
||||
}
|
||||
// if (!newValue || angular.equals(newValue, oldValue)) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
var errCount = 0;
|
||||
for (var e in formCtrl.$error) {
|
||||
if (angular.isArray(formCtrl.$error[e])) {
|
||||
errCount++;
|
||||
}
|
||||
}
|
||||
// var errCount = 0;
|
||||
// for (var e in formCtrl.$error) {
|
||||
// if (angular.isArray(formCtrl.$error[e])) {
|
||||
// errCount++;
|
||||
// }
|
||||
// }
|
||||
|
||||
//we are explicitly checking for valServer errors here, since we shouldn't auto clear
|
||||
// based on other errors. We'll also check if there's no other validation errors apart from valPropertyMsg, if valPropertyMsg
|
||||
// is the only one, then we'll clear.
|
||||
// //we are explicitly checking for valServer errors here, since we shouldn't auto clear
|
||||
// // based on other errors. We'll also check if there's no other validation errors apart from valPropertyMsg, if valPropertyMsg
|
||||
// // is the only one, then we'll clear.
|
||||
|
||||
if ((errCount === 1 && angular.isArray(formCtrl.$error.valPropertyMsg)) || (formCtrl.$invalid && angular.isArray(formCtrl.$error.valServer))) {
|
||||
scope.errorMsg = "";
|
||||
formCtrl.$setValidity('valPropertyMsg', true);
|
||||
stopWatch();
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
// if ((errCount === 1 && angular.isArray(formCtrl.$error.valPropertyMsg)) || (formCtrl.$invalid && angular.isArray(formCtrl.$error.valServer))) {
|
||||
// scope.errorMsg = "";
|
||||
// formCtrl.$setValidity('valPropertyMsg', true);
|
||||
// stopWatch();
|
||||
// }
|
||||
// }, true);
|
||||
//}
|
||||
}
|
||||
|
||||
//clear the watch when the property validator is valid again
|
||||
@@ -178,8 +176,8 @@ function valPropertyMsg(serverValidationManager) {
|
||||
// indicate that a content property is invalid at the property level since developers may not actually implement
|
||||
// the correct field validation in their property editors.
|
||||
|
||||
if (currentProperty) { //this can be null if no property was assigned
|
||||
serverValidationManager.subscribe(currentProperty.alias, currentCulture, "", function (isValid, propertyErrors, allErrors) {
|
||||
if (scope.currentProperty) { //this can be null if no property was assigned
|
||||
serverValidationManager.subscribe(scope.currentProperty.alias, currentCulture, "", function (isValid, propertyErrors, allErrors) {
|
||||
hasError = !isValid;
|
||||
if (hasError) {
|
||||
//set the error message to the server message
|
||||
@@ -201,7 +199,7 @@ function valPropertyMsg(serverValidationManager) {
|
||||
// but they are a different callback instance than the above.
|
||||
element.bind('$destroy', function () {
|
||||
stopWatch();
|
||||
serverValidationManager.unsubscribe(currentProperty.alias, currentCulture, "");
|
||||
serverValidationManager.unsubscribe(scope.currentProperty.alias, currentCulture, "");
|
||||
});
|
||||
|
||||
//checkValidationStatus();
|
||||
|
||||
@@ -43,21 +43,21 @@ function valServer(serverValidationManager) {
|
||||
function startWatch() {
|
||||
//if there's not already a watch
|
||||
if (!watcher) {
|
||||
watcher = scope.$watch(function () {
|
||||
return modelCtrl.$modelValue;
|
||||
}, function (newValue, oldValue) {
|
||||
//watcher = scope.$watch(function () {
|
||||
// return modelCtrl.$modelValue;
|
||||
//}, function (newValue, oldValue) {
|
||||
|
||||
if (!newValue || angular.equals(newValue, oldValue)) {
|
||||
return;
|
||||
}
|
||||
// if (!newValue || angular.equals(newValue, oldValue)) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (modelCtrl.$invalid) {
|
||||
modelCtrl.$setValidity('valServer', true);
|
||||
//clear the server validation entry
|
||||
serverValidationManager.removePropertyError(currentProperty.alias, currentCulture, fieldName);
|
||||
stopWatch();
|
||||
}
|
||||
}, true);
|
||||
// if (modelCtrl.$invalid) {
|
||||
// modelCtrl.$setValidity('valServer', true);
|
||||
// //clear the server validation entry
|
||||
// serverValidationManager.removePropertyError(currentProperty.alias, currentCulture, fieldName);
|
||||
// stopWatch();
|
||||
// }
|
||||
//}, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user