Använd en bekräftelsemodal när användare har gjort ett val som har stor påverkan och som hen inte kan ångra enkelt.
En bekräftelsemodal har
rubriktext
brödtext
en knapptext för den destruktiva handlingen, till exempel för att ta bort uppgifter
en knapptext för att ångra och gå tillbaka.
En sekundär knapp används för att ångra och gå tillbaka.
En primärknapp används för att utföra den destruktiva handlingen.
En bekräftelsemodal kan även ha en tredje knapp.
På Försäkringskassan.se placeras den sekundära knappen först, följt av den primära. Eftersom det primära alternativet att bekräfta tidigare val är "destruktivt" placeras den sist för att minimera risken att användaren råkar välja det av misstag.
För interna system följer vi Windows standard, det primära alternativet placeras först.
Du styr den inbördes ordning som knapparna presenteras i med konfiguration i applikationen där modalen används.
Visa kod
<template >
<div class ="f-confirm-modal" >
<button type ="button" class ="button button--secondary" @click ="onClick" > Öppna Modal</button >
<pre v-if ="result" > Resultat: {{ result }} </pre >
<div >
<f-confirm-modal
:is-open ="isOpen"
:buttons ="buttons"
@confirm ="confirm"
@dismiss ="dismiss"
@close ="close"
>
<template #heading > Träutensilierna </template >
<template #content >
Träutensilierna i ett tryckeri äro ingalunda en oviktig faktor, för trevnadens,
ordningens och ekonomiens upprätthållande, och dock är det icke sällan som
sorgliga erfarenheter göras på grund af det oförstånd med hvilket kaster,
formbräden och regaler tillverkas och försäljas Kaster som äro dåligt hopkomna
och af otillräckligt.
</template >
</f-confirm-modal >
</div >
</div >
</template >
<script >
import { defineComponent } from "vue" ;
import { FConfirmModal } from "@fkui/vue" ;
export default defineComponent ({
name : "FConfirmModalExample" ,
components : { FConfirmModal },
inheritAttrs : true ,
data ( ) {
return {
action : "" ,
result : "" ,
isOpen : false ,
buttons : [
{ label : "Ja, gör detta" , event : "confirm" , type : "primary" },
{ label : "Nej, gör inte detta" , event : "dismiss" , type : "secondary" },
],
};
},
methods : {
onClick ( ) {
this .isOpen = true ;
this .result = "" ;
},
confirm ( ) {
this .result = "bekräftade" ;
this .isOpen = false ;
},
dismiss ( ) {
this .result = "avböjde" ;
this .isOpen = false ;
},
close (reason ) {
this .action = reason;
this .isOpen = false ;
},
},
});
</script >
Visa kod
<template >
<div class ="f-confirm-modal" >
<button type ="button" class ="button button--secondary" @click ="onClick" > Ta bort</button >
</div >
</template >
<script >
import { defineComponent } from "vue" ;
import { confirmModal } from "@fkui/vue" ;
export default defineComponent ({
name : "FConfirmModalExample" ,
data ( ) {
return {
frukt : {
namn : "Mango" ,
},
};
},
methods : {
confirmRemove (frukt ) {
return confirmModal (this , {
heading : "Ta bort frukt" ,
content : `Är du säker att du vill ta bort "${frukt.namn} "?` ,
confirm : "Ja, ta bort" ,
dismiss : "Nej, behåll" ,
});
},
async onClick ( ) {
if (await this .confirmRemove (this .frukt )) {
alert ("Bekräftade" );
}
},
},
});
</script >
Visa kod
<template >
<div class ="f-confirm-modal" >
<button type ="button" class ="button button--secondary" @click ="onClick" > Tre knappar</button >
<pre > Modalen stängdes med resultatet: {{ action }} </pre >
</div >
</template >
<script lang ="ts" >
import { defineComponent } from "vue" ;
import { type ModalResult , openModal, FConfirmModal } from "@fkui/vue" ;
export default defineComponent ({
name : "FConfirmModalExample" ,
data ( ) {
return {
action : undefined as ModalResult <void > | undefined ,
isOpen : false ,
threeButtons : [
{
label : "Ja, ta bort" ,
type : "primary" ,
screenreader : "telefonnumret" ,
event : "confirm" ,
},
{ label : "Nej, uppdatera telefonnumret" , event : "update" },
{ label : "Nej, ta inte bort" , screenreader : "telefonnumret" , event : "dismiss" },
],
};
},
methods : {
async onClick ( ) {
this .action = await openModal (this , FConfirmModal , {
props : {
heading : "Ta bort telefonnummer" ,
content : "Vill du ta bort ditt telefonnummer?" ,
buttons : this .threeButtons ,
size : "large" ,
},
});
},
},
});
</script >
Du kan lägga till extra skärmläsartext på knappar med screenreader
-property:
-buttons: [{ label: "Stäng", event: "dismiss" }];
+buttons: [{ label: "Stäng", screenreader: "formuläret", event: "dismiss" }];
Om du använder screenreader
för en knapp så kommer skärmläsare att läsa upp den texten efter knapptexten i label
. Detta används för att tydliggöra vad knappen kommer att göra i de fallen där det kan vara otydligt för skärmläsaranvändare.
Props Name Description Type Required Default fullscreen
Enable fullscreen mode in mobile.
boolean
false
false
isOpen
Prop for opening modal
boolean
false
false
content
Simple text content
string
false
"Brödtext"
heading
Simple text header
string
false
"Rubrik"
size
The size of modal. 'large' and 'fullscreen' is valid.
string
false
""
ariaCloseText
The aria-label attribute text for the top right close button.
string
false
undefined
buttons
List of buttons
FModalButtonDescriptor[]
false
(): FModalButtonDescriptor[] => {
return defaultButtons;
}
Events Name Description Properties close
Emits reason for closing modal
<anonymous>: undefined
button.event
Emits specified button event when clicked
‐
Slots Name Description Bindings heading
Slot for advanced header.
‐
content
Slot for advanced content.
‐
Modal dialogruta