0

Ich möchte vergleichen, ob die beiden Werte von Formen identisch sind. Ich habe diesAngular 2: Vergleichen Sie 2 Formen

if(this.holdForm.value != this.positionForm.value){ 
    this.enableButton = true; 
}else{ 
    this.enableButton = false; 
} 

aber es funktioniert nicht. Dadurch wird enableButton nicht wahr.

AKTUALISIERT:

this.positionForm = this.fb.group({ 
      'name' : [position.name, Validators.required], 
      'remark': position.remark 
     }); 

    this.holdForm = this.fb.group({ 
     'name' : position.name, 
     'remark': position.remark 
    }); 



    this.positionForm.valueChanges.subscribe(data => { 
     this.onValueChanged(data); 
     if(this.data.process == 'register'){ 
      this.enableButton = true; 
     }else if(this.data.process == 'update' && this.holdForm.value != this.positionForm.value){ 
      this.enableButton = true; 
     }else{ 
      this.enableButton = false; 
     } 
    }); 
+1

Was ist der Fehler, den Sie bekommen? können Sie die beiden Formen –

+0

posten Ich habe keinen Fehler. Der andere ist eine temporäre Form für vorherige Werte. Ich möchte vergleichen, ob es Änderungen gibt. Siehe aktualisiert @RahulSingh – Char

+1

Sie können Bibliothek wie lodash und seine gleiche Methode verwenden, um zwei Objekte zu vergleichen ! _. IsEqual (this.holdForm.value, this.positionForm.value) –

Antwort

0

was Sie tun sollten, ist ein benutzerdefinierter Validator zu schreiben, zum Beispiel der, der überprüft, ob das Passwort mit dem Feld confirm password übereinstimmt. wie:

this.formBuilder.group({ 
    password: [''], 
    confirmPassword: [''], 
    }, { 
    validator: matchingFieldsValidation("password", "confirmPassword") 
}) 

export function matchingFieldsValidation(firstControlName: string, secondControlName: string): ValidatorFn { 
    return (control: AbstractControl): {[key: string]: any} => { 
     const firstControl= control.get(firstControlName); 
     const secondControl= control.get(secondControlName); 
     if (!firstControl|| !secondControl) return null; 
     return firstControl.value == secondControl.value ? null : {matchingFields: true} 
    } 
} 

Dann können Sie die Schaltfläche aktivieren/deaktivieren je nach Validierungsstatus. IMHO die sauberste Lösung.

0

Sie können die Objektwerte nicht direkt vergleichen:

var person1 = {name:"John"}; 
var person2 = {name:"John"}; 
console.log(person1===person2) // will give you false 

Das liegt daran, dass die beiden person1 und person2 zeigte auf zwei verschiedene Referenzen in die Erinnerung.

Wenn Sie nur die Werte der beiden Objekte vergleichen wollen, können Sie eine einfache, aber teure Art und Weise haben: stringify sie und dann die Saiten vergleichen:

JSON.stringify(person1) === JSON.stringify(person2) //this gives you true 

viele Einschränkungen der Zeichenfolge Es gibt mit Methode oben. Eine davon ist die Reihenfolge der Eigenschaften im Objekt. Vielleicht möchten Sie sich eine allgemeinere Lösung zum Vergleichen des Objekts vorstellen.

+0

Ich aktualisierte meine Frage @CozyAzure – Char