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

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”.


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 */ })


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.