Skip to content

Alert ​

Overview ​

The Alert component is used to display important information to users. It supports different types, themes, and interactive features to provide clear feedback and notifications.

Basic Usage ​

vue
<template>
  <div>
    <el-alert title="Success alert" type="success" />
    <el-alert title="Info alert" type="info" />
    <el-alert title="Warning alert" type="warning" />
    <el-alert title="Error alert" type="error" />
  </div>
</template>

Alert Types ​

Success Alert ​

vue
<template>
  <el-alert
    title="Congratulations, it's a success"
    type="success"
    :closable="false"
  />
</template>

Info Alert ​

vue
<template>
  <el-alert
    title="Info: this is a info alert"
    type="info"
    :closable="false"
  />
</template>

Warning Alert ​

vue
<template>
  <el-alert
    title="Warning: this is a warning alert"
    type="warning"
    :closable="false"
  />
</template>

Error Alert ​

vue
<template>
  <el-alert
    title="Error: this is an error alert"
    type="error"
    :closable="false"
  />
</template>

Theme Variations ​

Light Theme (Default) ​

vue
<template>
  <div>
    <el-alert title="Success alert" type="success" />
    <el-alert title="Info alert" type="info" />
    <el-alert title="Warning alert" type="warning" />
    <el-alert title="Error alert" type="error" />
  </div>
</template>

Dark Theme ​

vue
<template>
  <div>
    <el-alert title="Success alert" type="success" effect="dark" />
    <el-alert title="Info alert" type="info" effect="dark" />
    <el-alert title="Warning alert" type="warning" effect="dark" />
    <el-alert title="Error alert" type="error" effect="dark" />
  </div>
</template>

Alert with Description ​

vue
<template>
  <div>
    <el-alert
      title="Success"
      type="success"
      description="More text description"
    />
    
    <el-alert
      title="Info"
      type="info"
      description="More text description"
    />
    
    <el-alert
      title="Warning"
      type="warning"
      description="More text description"
    />
    
    <el-alert
      title="Error"
      type="error"
      description="More text description"
    />
  </div>
</template>

Alert with Icon ​

vue
<template>
  <div>
    <el-alert title="Success alert" type="success" show-icon />
    <el-alert title="Info alert" type="info" show-icon />
    <el-alert title="Warning alert" type="warning" show-icon />
    <el-alert title="Error alert" type="error" show-icon />
  </div>
</template>

Alert with Icon and Description ​

vue
<template>
  <div>
    <el-alert
      title="Success"
      type="success"
      description="More text description"
      show-icon
    />
    
    <el-alert
      title="Info"
      type="info"
      description="More text description"
      show-icon
    />
    
    <el-alert
      title="Warning"
      type="warning"
      description="More text description"
      show-icon
    />
    
    <el-alert
      title="Error"
      type="error"
      description="More text description"
      show-icon
    />
  </div>
</template>

Centered Alert ​

vue
<template>
  <div>
    <el-alert
      title="Success"
      type="success"
      center
      show-icon
    />
    
    <el-alert
      title="Info"
      type="info"
      center
      show-icon
    />
    
    <el-alert
      title="Warning"
      type="warning"
      center
      show-icon
    />
    
    <el-alert
      title="Error"
      type="error"
      center
      show-icon
    />
  </div>
</template>

Closable Alert ​

vue
<template>
  <div>
    <el-alert
      title="Unclosable alert"
      type="success"
      :closable="false"
    />
    
    <el-alert
      title="Closable alert"
      type="info"
      closable
      @close="handleClose"
    />
    
    <el-alert
      title="Customized close-text"
      type="warning"
      close-text="Gotcha"
    />
  </div>
</template>

<script setup>
const handleClose = () => {
  console.log('Alert closed')
}
</script>

Custom Content ​

vue
<template>
  <div>
    <el-alert title="Alert with custom content" type="info">
      <template #default>
        <p>This is a custom content area.</p>
        <p>You can put any content here, including:</p>
        <ul>
          <li>Lists</li>
          <li>Links: <a href="#">Click here</a></li>
          <li>Other components</li>
        </ul>
      </template>
    </el-alert>
    
    <el-alert type="warning">
      <template #title>
        <span>Custom Title with <strong>HTML</strong></span>
      </template>
      <template #default>
        <p>Custom content with <em>emphasis</em> and other formatting.</p>
      </template>
    </el-alert>
  </div>
</template>

Alert with Actions ​

vue
<template>
  <div>
    <el-alert
      title="Action Required"
      type="warning"
      description="Please review and confirm your settings before proceeding."
      show-icon
    >
      <template #default>
        <div style="margin-top: 10px;">
          <el-button size="small" type="primary" @click="handleConfirm">
            Confirm
          </el-button>
          <el-button size="small" @click="handleCancel">
            Cancel
          </el-button>
        </div>
      </template>
    </el-alert>
    
    <el-alert
      title="Update Available"
      type="info"
      description="A new version is available. Would you like to update now?"
      show-icon
    >
      <template #default>
        <div style="margin-top: 10px;">
          <el-button size="small" type="primary" @click="handleUpdate">
            Update Now
          </el-button>
          <el-button size="small" type="text" @click="handleLater">
            Remind Me Later
          </el-button>
        </div>
      </template>
    </el-alert>
  </div>
</template>

<script setup>
const handleConfirm = () => {
  console.log('Confirmed')
}

const handleCancel = () => {
  console.log('Cancelled')
}

const handleUpdate = () => {
  console.log('Update started')
}

const handleLater = () => {
  console.log('Remind later')
}
</script>

Dynamic Alerts ​

vue
<template>
  <div>
    <el-button @click="addAlert">Add Alert</el-button>
    <el-button @click="clearAlerts">Clear All</el-button>
    
    <div style="margin-top: 20px;">
      <el-alert
        v-for="alert in alerts"
        :key="alert.id"
        :title="alert.title"
        :type="alert.type"
        :description="alert.description"
        show-icon
        closable
        @close="removeAlert(alert.id)"
        style="margin-bottom: 10px;"
      />
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const alerts = ref([])
let alertId = 0

const alertTypes = ['success', 'info', 'warning', 'error']
const alertMessages = {
  success: { title: 'Success!', description: 'Operation completed successfully.' },
  info: { title: 'Information', description: 'Here is some important information.' },
  warning: { title: 'Warning!', description: 'Please pay attention to this warning.' },
  error: { title: 'Error!', description: 'An error occurred. Please try again.' }
}

const addAlert = () => {
  const type = alertTypes[Math.floor(Math.random() * alertTypes.length)]
  const message = alertMessages[type]
  
  alerts.value.push({
    id: ++alertId,
    type,
    title: message.title,
    description: message.description
  })
}

const removeAlert = (id) => {
  const index = alerts.value.findIndex(alert => alert.id === id)
  if (index > -1) {
    alerts.value.splice(index, 1)
  }
}

const clearAlerts = () => {
  alerts.value = []
}
</script>

Alert with Progress ​

vue
<template>
  <div>
    <el-alert
      title="Upload in Progress"
      type="info"
      :closable="false"
      show-icon
    >
      <template #default>
        <p>Uploading files... {{ progress }}%</p>
        <el-progress :percentage="progress" :show-text="false" />
        <div style="margin-top: 10px;">
          <el-button size="small" @click="startUpload" :disabled="uploading">
            {{ uploading ? 'Uploading...' : 'Start Upload' }}
          </el-button>
          <el-button size="small" @click="cancelUpload" :disabled="!uploading">
            Cancel
          </el-button>
        </div>
      </template>
    </el-alert>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const progress = ref(0)
const uploading = ref(false)
let uploadTimer = null

const startUpload = () => {
  uploading.value = true
  progress.value = 0
  
  uploadTimer = setInterval(() => {
    progress.value += Math.random() * 10
    if (progress.value >= 100) {
      progress.value = 100
      uploading.value = false
      clearInterval(uploadTimer)
    }
  }, 200)
}

const cancelUpload = () => {
  uploading.value = false
  progress.value = 0
  if (uploadTimer) {
    clearInterval(uploadTimer)
    uploadTimer = null
  }
}
</script>

Alert Attributes ​

AttributeDescriptionTypeDefault
titleTitle of Alertstring—
typeAlert typestringinfo
descriptionDescriptive textstring—
closableWhether Alert can be dismissedbooleantrue
centerWhether to center the textbooleanfalse
close-textCustomized close button textstring—
show-iconWhether to show an iconbooleanfalse
effectTheme of Alertstringlight

Alert Events ​

EventDescriptionParameters
closeTriggered when Alert is closed—

Alert Slots ​

NameDescription
—Content of Alert
titleContent of Alert title

Alert Types ​

The Alert component supports four types:

  • success: Used for successful operations and positive feedback
  • info: Used for general information and neutral messages
  • warning: Used for warnings and cautionary messages
  • error: Used for errors and critical issues

Best Practices ​

  1. Appropriate Usage: Use the correct alert type for the message context
  2. Clear Messaging: Write concise and actionable alert messages
  3. Accessibility: Ensure alerts are announced to screen readers
  4. Positioning: Place alerts where users expect to see feedback
  5. Auto-dismiss: Consider auto-dismissing non-critical alerts
  6. Action Buttons: Provide clear actions when user intervention is required

Common Use Cases ​

Form Validation Alerts ​

vue
<template>
  <el-form @submit="handleSubmit">
    <el-alert
      v-if="formErrors.length > 0"
      title="Please fix the following errors:"
      type="error"
      show-icon
    >
      <template #default>
        <ul>
          <li v-for="error in formErrors" :key="error">{{ error }}</li>
        </ul>
      </template>
    </el-alert>
    
    <!-- Form fields -->
  </el-form>
</template>

System Status Alerts ​

vue
<template>
  <div>
    <el-alert
      v-if="systemStatus === 'maintenance'"
      title="System Maintenance"
      type="warning"
      description="The system will be under maintenance from 2:00 AM to 4:00 AM UTC."
      show-icon
      :closable="false"
    />
    
    <el-alert
      v-if="systemStatus === 'offline'"
      title="System Offline"
      type="error"
      description="The system is currently offline. Please try again later."
      show-icon
      :closable="false"
    />
  </div>
</template>

Success Confirmation ​

vue
<template>
  <el-alert
    v-if="showSuccess"
    title="Changes Saved Successfully"
    type="success"
    description="Your changes have been saved and will take effect immediately."
    show-icon
    @close="showSuccess = false"
  />
</template>
  • Message - Floating message notifications
  • Notification - Desktop-style notifications
  • Dialog - Modal dialogs for important messages
  • Popover - Contextual information popups

Element Plus Study Guide