2016-08-08 32 views
0

Ich habe ein Formular, wo ich versuche, sicherzustellen, dass Groß-und Kleinschreibung keine Probleme mit einer E-Mail-Validierung ist. Ich habe eine Winkelvalidierung genannt mustMatch, die genau das tut, was es angibt, es stellt sicher, dass die E-Mails den Index für den Index übereinstimmen. Allerdings muss ich auch sicherstellen, dass dieser Fall kein Problem darstellt. Also habe ich am Ende eine zweite Funktion mit dem Namen matchCaseInsensitivity erstellt und am Ende habe ich ein Problem, weil ich entschieden habe, dass der beste Weg, dies zu beheben, darin bestünde, den Filter tolowerCase() hinzuzufügen. Als ich das tat, war ich in der Lage, meine eckigen mustMatch-Fehlermeldungen zu umgehen (was gut ist), aber wenn ich eine Submit auf dem Formular treffen würde, würde ich dann ein Javascript-Problem in diesem 'tolowerCase()' is undefined stoßen.Funktion in Validator, nicht Controller gibt mir eine undefiniert bei "lowerCase()"

Ich denke, dass der Grund, warum ich diesen Fehler bekomme, ist, weil ich diese in eine Validator-Datei eingebaut habe, nicht einen Controller. (nicht sicher, ob das etwas ist)

Mein Frontend sieht so aus. Beachten Sie die 'match-case-insensitive' => true als meine Build für die Lösung

 %input-md{ type: "email", "ng-model" => "vm.form.email_confirmation", required: true, 'must-match' => 'register_form["vm-form-email"]', 'match-case-insensitive' => true, 'ng-hide' => 'vm.form.validated_email', autocapitalize: 'off' } 
     Confirm email address 

Meine mustMatch Validierung Fehlermeldung

if attr.mustMatch then addValidation 'mustMatch', 'This field must match the previous value.' 

Die eigentliche Funktion, die die mustMatch Fehlermeldung auslöst, ich habe es auch mit dem "match-case-insensitive' gebündelt, dass ich beziehen sich auf das Frontend. Dies ist auch in einer Validierungsdatei, nicht der Controller. (Was das wert ist .... ich weiß nicht). (Wohlgemerkt, ist es in Coffeescript)

getMatchValue = -> 
     match = matchGetter($scope) 
     if (angular.isObject(match) and match.hasOwnProperty('$viewValue')) 
     match = match.$viewValue 
     match 

    $scope.$watch getMatchValue, -> 
     ctrl.$$parseAndValidate() 
     return 

    ctrl.$validators.mustMatch = -> 

     match = getMatchValue() 
     if $attrs.matchCaseInsensitive 
     ctrl.$viewValue.toLowerCase() is match.toLowerCase() 
     else 
     ctrl.$viewValue is match 

    return 

ich weiterhin diese TypeError: Cannot read property 'toLowerCase' of undefined at r.$validators.mustMatch zu bekommen. Ich bin seit über 2 Tagen daran fest und weiß ehrlich nicht, wie ich es lösen soll. Ich wäre wirklich dankbar, wenn jemand einen Blick darauf werfen könnte, was er tun kann.

Antwort

0

Aus dem Fehler wird deutlich, dass entweder ctrl.$viewValue oder match (oder beide) sind. Nicht sicher, was das erwartete Verhalten in dieser Situation sein soll, aber hier ist eine Möglichkeit, wie Sie es tun könnten (ich werde dies in JavaScript schreiben):

match = getMatchValue() 

if (!(match && ctrl.$viewValue)) { 
    return false 
} 

if ($attrs.matchCaseInsensitive) { 
    return ctrl.$viewValue.toLowerCase() === match.toLowerCase() 
} 

return ctrl.$viewValue === match