Jaka jest różnica między „odrzuceniem” modalu a „zamknięciem” modalu w Angular UI-Bootstrap?

83

Jaka jest różnica między „odrzuceniem” modalu a „zamknięciem” modalu?

close(result) - a method that can be used to close a modal, passing a result
dismiss(reason) - a method that can be used to dismiss a modal, passing a reason
Zielony
źródło

Odpowiedzi:

91

Odpowiedź znajduje się w dokumentacji, zaraz po zacytowanych dwóch wierszach:

Metoda open zwraca instancję modalną, obiekt o następujących właściwościach:

  • close (result) - metoda, której można użyć do zamknięcia modalu, przekazując wynik
  • odrzucenie (przyczyna) - metoda, której można użyć do odrzucenia modalu, podając przyczynę
  • wynik - obietnica, która jest rozpatrywana, gdy modal jest zamykany i odrzucana, gdy modal jest odrzucany

Ważne jest tutaj to, co dzieje się z obietnicą. Po zamknięciu obietnica zostaje rozwiązana - w zasadzie wywołanie zwrotne „sukcesu” zostaje uruchomione. Po odrzuceniu obietnica jest odrzucana, dlatego zamiast niej uruchamiane jest wywołanie zwrotne „niepowodzenie”.

JB Nizet
źródło
33
Ważne jest tutaj to, co dzieje się z obietnicą. Po zamknięciu obietnica zostaje rozwiązana - w zasadzie wywołanie zwrotne „sukcesu” zostaje uruchomione. Po odrzuceniu obietnica jest odrzucana, dlatego zamiast niej uruchamiane jest wywołanie zwrotne „niepowodzenie”.
Brian
Mam dodatkowe pytanie: z perspektywy interfejsu użytkownika, co oznacza zamknięcie okna dialogowego? Jak rozumiem, użytkownik może zamknąć to okno za pomocą „OK” lub „Anuluj” (także „x” w oknie). Jak można to usunąć z interfejsu użytkownika? Z góry dziękuję
lm.
1
To znaczy, co chcesz, żeby oznaczało. Szablon okna dialogowego zależy od Ciebie. Możesz mieć 4 przyciski w szablonie, dwa odrzucające każdy z własnego powodu i dwa zamykające każdy z własnym wynikiem. Spójrz na demo na angular-ui.github.io/bootstrap : przycisk OK wywołuje ok (), co w rezultacie zamyka okno dialogowe z wybranym elementem, a przycisk anulowania wywołuje anulowanie (), co zamyka okno dialogowe z „anuluj” jako powód.
JB Nizet
1
Dzięki, ale mam inne pytanie na ten temat: jakie jest prawdziwe znaczenie zwolnienia? Czy jest jak blisko bez obietnicy? A powód, jaki jest jego główny cel? Jaka jest różnica między zwolnieniem za pomocą „foo” lub „bar”? Nie rozumiem, jak używać tego parametru ... Jeśli ktoś może wyjaśnić ...
M'sieur Toph '
1
@JBNizet: masz rację, ale rozgryzłem to. Głupi błąd, który od czasu do czasu gryzie mnie w dupę i zapomina o ustawieniu typu przycisku na button. : P
im1dermike
2

Zauważyłem, że odrzucenie modalu najlepiej jest użyć, jeśli pochodzi od użytkownika zamykającego modal (np. Powracającego do stanu za modalem i wywołującego stan. Go ('^')) i używane jest zamknięcie modalu przy zmianie stanu poprzez $ state.go lub ui-sref.

W ten sposób możesz wykorzystać resultobietnicę do zrobienia różnych rzeczy, w zależności od tego, co się stanie.

result.then(function() { /* state change via ui-sref */ })

result.catch(function() { /* user closed modal */ })

AnthW
źródło
1
Jest to ważne, ponieważ po odrzuceniu modalu obietnica nie zostanie rozwiązana, co oznacza, że ​​otrzymasz błąd konsoli, chyba że złapiesz błąd. Nie jestem wielkim fanem, ponieważ zwolnienie jest często używane do anulowania, co nie jest rzeczywistym problemem. Wdrożenie catch zapobiega wyrzucaniu błędu.
Jared Sol
Ta odpowiedź zakłada, że ​​użytkownik korzysta z ui-routerbiblioteki innej firmy , co nie zawsze ma miejsce (ani też pytanie jej nie obejmuje).
runderworld