2017-07-17 1 views
1

Ich habe ein reaktives Formular-Setup in meiner Komponente, die es einem Benutzer ermöglicht, Benutzerdaten innerhalb des Formulars zu bearbeiten.Angular2 Reactive Forms deaktivieren Elemente in Formulargruppe

In diesem Formular gibt es Tabellenzeilen und am Ende jeder Zeile befindet sich ein Kontrollkästchen, das alle Eingaben in dieser Zeile deaktiviert oder aktiviert. Der Benutzer ermöglicht im Wesentlichen, dass diese Gruppe von Eingabedaten ausgefüllt wird.

Hier ist meine Form Gruppe:

slice3: this.fb.group({ 
    shitStatus: { value: 0 }, 
    hour_start: { value: '1', disabled: true }, 
    minute_start: { value: '00', disabled: true }, 
    period_start: { value: 'AM', disabled: true }, 
    hour_end: { value: '1', disabled: true }, 
    minute_end: { value: '00', disabled: true }, 
    period_end: { value: 'AM', disabled: true }, 
    days: this.fb.group({ 
     day_Su: { value: '', disabled: true }, 
     day_M: { value: '', disabled: true }, 
     day_Tu: { value: '', disabled: true }, 
     day_W: { value: '', disabled: true }, 
     day_Th: { value: '', disabled: true }, 
     day_F: { value: '', disabled: true }, 
     day_Sa: { value: '', disabled: true } 
    }) 
}) 

Ich habe eine Funktion, die alle Elemente in dieser Form Gruppe wechselt, wenn sie das Feld aktivieren oder deaktivieren:

toggleSlice(slice) { 

    if (this.transitionForm.get('shift.slice' + slice).disabled) { 
    this.transitionForm.get('shift.slice' + slice).enable(); 
    } else { 
    this.transitionForm.get('shift.slice' + slice).disable(); 
    } 

} 

ist mein Problem aufgrund do shiftStatus Als Teil der Formulargruppe deaktiviert es auch die Umschaltfläche, die mich daran hindert, diese Elemente wieder zu aktivieren.

Gibt es irgendeine Möglichkeit, hier einen Operator zu verwenden, der mir erlaubt, alles außer shift.slice mit Ausnahme eines bestimmten Eingangs zu deaktivieren?

In jQuery zum Beispiel könnte ich etwas wie :not("blah") sagen, um diese Logik auf alles außer diesem Eingang anzuwenden.

Kann alles mit Javascript getan werden, das mir erlaubt, alle diese Elemente innerhalb einer Formulargruppe außer einer, die ich spezifiziere, zu deaktivieren?

Antwort

2

Die einfachste Lösung, die ich sehe, ist, alle Formularsteuerelemente zu deaktivieren und dann nur diese eine Formularsteuerung zu aktivieren, kann ich nicht über einen besseren Weg nachdenken. Hier ist nur Pseudo-Code:

if (this.myForm.get('group').disabled) { 
    this.myForm.get('group').enable(); 
} else { 
    this.myForm.get('group').disable(); 
    this.myForm.get('group.shiftStatus').enable() 
} 

Was würden Sie vielleicht auch wollen, ist tatsächlich speichern diese Form Steuerpfade zu Variablen, so dass Sie nicht rufen müssen get die ganze Zeit, aber das ist nur ein Vorschlag :)

+0

Danke, habe nicht wirklich daran gedacht, nur das einzelne Element wieder zu aktivieren .. es war spät :) – SBB

+0

Manchmal sind die einfachsten Dinge gerade vor uns und können nicht gesehen werden Geschieht uns allen: D Glad zu hören, dass die Lösung für Sie akzeptabel war, ich denke wirklich, dass dies der beste Weg ist, damit umzugehen. – Alex

Verwandte Themen