Ich habe zwei HTML-Eingaben (type="email"
, type="number"
) und meine Angular-App beobachtet sie mit $formatters
und $parsers
. Die Fehler werden in einem Array gespeichert und wenn Benutzer eine E-Mail einfügen, die "@gmail" enthält, wird der Fehler aus dem Array entfernt.Kann 'xxyx'-Eigenschaft von undefiniert nicht lesen, auch wenn Element existiert
app.controller('form1Controller', function($scope, UserService) {
$scope.formCompleted = false;
$scope.errors = UserService.errors;
//handle the user email input.
$scope.storeEmailErr = function(data) {
var correctKey = "@gmail";
var key = "#userEmail";
var res = {};
if (data != null) {
res = $scope.handleError(data, emailIn, correctKey, key, $scope.errors);
$scope.errors = res[0];
UserService.errors = res[0];
emailIn = res[1];
}
};
//handle the user email input.
$scope.storeIdErr = function(data) {
var correctKey = "0000";
var key = "#userId";
var res = {};
if (data != null) {
res = $scope.handleError(data, idIn, correctKey, key, $scope.errors);
$scope.errors = res[0];
idIn = res[1];
}
};
}
Dies ist der Code, der Fehler aus dem Array hinzufügt und entfernt. Und hier nehme ich an, um das Problem
function theIndexOf(val) {
console.log("find index in array of length: " + errorsDescription.length)
for (var i = 0; i < errorsDescription.length; i++) {
if (errorsDescription[i].selector === val) {
return i;
}
}
}
app.run(function($rootScope){
$rootScope.handleError = function(data, elemIn, correctKey, key, errorArray){
var idx = theIndexOf(key);
console.log("get index >>>>> " + idx);
var obj = errorsDescription[idx];
//if user didn't put correct word i.e. @gmail or 0000
if (data.indexOf(correctKey) < 0) {
if (!elemIn) {
errorArray.push(obj);
elemIn = true;
}
} else {
if (elemIn) {
$.each(errorArray, function(i){
if(errorArray[i].selector === key) {
errorArray.splice(i, 1);
elemIn = false;
}
});
}
}
return [errorArray, elemIn];
}
});
Das Problem ist, dass, wenn ich einfügen dh „[email protected]“, wird der Fehler aus dem Array gelöscht und wenn ich richtig Daten einfügen wieder sagt es mir, dass nicht lesen kann 'yyy' Eigenschaft von undefined.
Hier ist mein Plunker. https://plnkr.co/edit/l0ct4gAh6v10i47XxcmT?p=preview
Im Plunker, geben Sie in den ‚Test @ gmail‘ Felder und test0000 für die Nummer, dann Daten entfernen, dann wieder die gleichen Daten einfügen würde das Problem zu sehen
Jede Hilfe sehr geschätzt!
Ich sehe keine Fehler in Ihren Plunkr-Nachrichten .. Was ist das Problem genau? – MayK
'$ scope' könnte nicht' $ rootScope' erben. Ich würde versuchen, Ihre 'handleError'-Funktion als Dienst oder etwas neu zu schreiben. Das würde deinen Code ein bisschen aufräumen. – robert
In '$ scope.storeEmailErr' initialisieren Sie' res' als Objekt, aber dann wird 'res' dem Rückgabewert von' $ rootScope.handleError', einem Array, neu zugewiesen. Das ist ein bisschen seltsam :). – robert