Skip to content

Toast

CToast is used to display messages in an overlay.

Toast Service

CToast component is controlled via the ToastService that needs to be installed as an application plugin.

ts
import {createApp} from 'vue';
import ToastService from 'primevue/toastservice';

const app = createApp(App);
app.use(ToastService);

Recommended location of a CToast is the main application template so that the component can be accessed in a shared manner.

vue
<template>
  <CToast />
</template>

The useToast composable can be accessed anywhere within your application to interact with the component.

vue
<script setup lang="ts">
import { useToast } from 'primevue/usetoast';

const toast = useToast();   // instance to create messages
</script>

Basic

A single message is represented by the Message interface that defines properties such as severity, summary and detail.

vue
<template>
  <CToast />
  <CButton label="Show" @click="show()" />
</template>

<script setup lang="ts">
  import { useToast } from 'primevue/usetoast';

  const toast = useToast();

  const show = () => {
    toast.add({ 
      severity: 'info', 
      summary: 'Info', 
      detail: 'Message Content', 
      life: 3000 
    });
  };
</script>

Severity

The severity option specifies the type of the message.

vue
<template>
    <CToast />
    <CButton severity="neutral" label="Success" @click="showSuccess" />
    <CButton severity="neutral" label="Info" @click="showInfo" />
    <CButton severity="neutral" label="Warn" @click="showWarn" />
    <CButton severity="neutral" label="Error" @click="showError" />
    <CButton severity="neutral" label="Secondary" @click="showSecondary" />
    <CButton severity="neutral" label="Contrast" @click="showContrast" />
</template>

<script setup lang="ts">
import { useToast } from "primevue/usetoast";

const toast = useToast();

const showSuccess = () => {
    toast.add({ 
      severity: 'success', 
      summary: 'Success Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};

const showInfo = () => {
    toast.add({ 
      severity: 'info', 
      summary: 'Info Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};

const showWarn = () => {
    toast.add({ 
      severity: 'warn', 
      summary: 'Warn Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};

const showError = () => {
    toast.add({ 
      severity: 'error', 
      summary: 'Error Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};

const showSecondary = () => {
    toast.add({ 
      severity: 'secondary', 
      summary: 'Secondary Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};

const showContrast = () => {
    toast.add({ 
      severity: 'contrast', 
      summary: 'Contrast Message', 
      detail: 'Message Content', 
      life: 3000 
    });
};
</script>

Position

A message can be targeted to a certain Toast component by matching the group keys whereas location is customized with the position.

vue
<template>
    <CToast position="top-left" group="tl" />
    <CToast position="bottom-left" group="bl" />
    <CToast position="bottom-right" group="br" />
    
    <CButton label="Top Left" @click="showTopLeft" />
    <CButton label="Bottom Left" @click="showBottomLeft" />
    <CButton label="Bottom Right" @click="showBottomRight" />
</template>

<script setup lang="ts">
import { useToast } from 'primevue/usetoast';

const toast = useToast();

const showTopLeft = () => {
    toast.add({ 
      severity: 'info', 
      summary: 'Info Message', 
      detail: 'Message Content', 
      group: 'tl', 
      life: 3000 
    });
};

const showBottomLeft = () => {
    toast.add({ 
      severity: 'warn', 
      summary: 'Warn Message', 
      detail: 'Message Content', 
      group: 'bl', 
      life: 3000 
    });
};

const showBottomRight = () => {
  toast.add({ 
    severity: 'success', 
    summary: 'Success Message', 
    detail: 'Message Content', 
    group: 'br', 
    life: 3000 
  });
};
</script>

Multiple

Multiple messages are displayed by passing an array to the show method.

vue
<template>
    <CToast />
    <CButton label="Multiple" @click="showMultiple()" />
</template>

<script setup lang="ts">
import { useToast } from 'primevue/usetoast';

const toast = useToast();

const showMultiple = () => {
    toast.add({ severity: 'success', summary: 'Success', detail: 'Message Content', life: 3000 });
    toast.add({ severity: 'info', summary: 'Info', detail: 'Message Content', life: 3500 });
    toast.add({ severity: 'warn', summary: 'Warn', detail: 'Message Content', life: 4000 });
    toast.add({ severity: 'error', summary: 'Error', detail: 'Message Content', life: 4500 });
};
</script>

Sticky

A message disappears after the number of milliseconds defined in the life option. Omit the life option to make the message sticky.

vue
<template>
    <CToast />
    <CButton @click="showSticky" label="Sticky" />
    <CButton severity="neutral" label="Clear" @click="clear()" />
</template>

<script setup lang="ts">
import { useToast } from 'primevue/usetoast';

const toast = useToast();

const showSticky = () => {
    toast.add({ severity: 'info', summary: 'Sticky Message', detail: 'Message Content'});
}

const clear = () => {
    toast.removeAllGroups();
}
</script>