So senden Sie ein zweites Formular erst, nachdem das andere Formular erfolgreich übergeben wurde

8

Ich verwende Angular mit UI Router und Firebase. Auf einer Seite gibt es zwei Formulare in zwei verschiedenen Zuständen: ein Kontaktformular und ein Kreditkartenformular.

Wenn der Benutzer auf "Senden" klickt, werden die Kreditkarteninformationen an Stripe gesendet. Das Kontaktformular wird dann an Firebase gesendet, jedoch erst, nachdem die Kreditkartentransaktion erfolgreich abgeschlossen wurde. Der folgende Code funktioniert in der Entwicklung. Aber wenn der Code minimiert wird, wird das Kontaktformular nie gesendet.

Irgendwelche Gedanken darüber, was ich falsch mache?

Controller für Kontaktformular:

%Vor%

Controller für Kreditkartenform:

%Vor%

ServiceB-Service:

%Vor%

Kontakte Fabrik:

%Vor%

Routerinfo:

%Vor%

UPDATE : Wenn ich .then(function() {$state.go('thankyou');}) vom Controller für das Kreditkartenformular verschiebe und es am Ende von Contacts.$add(contactForm.contact) im Controller für das Kontaktformular platziere, funktioniert alles. Das behebt das Problem, aber ich bin skeptisch, dass es die richtige Lösung ist. Irgendwelche Gedanken?

    
Ken 22.08.2015, 00:30
quelle

2 Antworten

3

Mein Verdacht ist, dass der beobachtete Ausdruck: serviceB.get durcheinander gebracht wird, wenn der Code minimiert wird

%Vor%

Und auch die Idee, auf einen Wechsel vom Dienst zu achten, erscheint mir sehr peinlich. Warum lässt du nicht zu, dass der Kredit-Controller ein Ereignis ausstrahlt, sobald die Verarbeitung abgeschlossen ist und der Kontakt-Controller dieses Ereignis anhören kann?

Im Kredit-Controller, nach Erhalt der Antwort von Post-Anfrage

%Vor%

In Kontaktsteuerung:

%Vor%     
Phuong Nguyen 03.09.2015 02:40
quelle
3

Es wäre wirklich interessant, Ihren minimierten Code zu sehen.

Wenn der Parameter stripeDone der Funktion nicht minimiert ist, wird die lokale Variable stripeDone ausgeblendet. Sie bewerten also den Wert von serviceB.get () in Ihrer if-Bedingung.

Was passiert, ist, dass beim Miniminieren der Minifier nicht erkennt, dass der Parameter stripeDone die lokale Variable versteckt und die lokale Variable stripeDone und stripeDone im if auf denselben Bezeichner und den Parameter stripeDone der Funktion minimiert zu einem anderen Parameter. Im minimierten Fall evaluieren Sie also die lokale Variable, deren Wert sich nicht ändert (null) und nicht den neuen Wert (ja).

Warum entfernen Sie nicht einfach diese Zeile?

%Vor%

Nur eine Hypothese ...

    
benohead 04.09.2015 19:54
quelle