Message
Message (메시지)
활동 후 피드백을 보여줄 때 사용하는 컴포넌트예요. Notification과의 차이는, Notification은 주로 시스템 레벨의 수동 알림에 쓰인다는 점이에요.
출처: 문서
본문
기본 사용법 (Basic usage)
기본적으로 상단에 표시되고 3초 후 사라져요. placement 속성으로 위치를 제어할 수 있어요. Message의 구성은 notification과 매우 비슷해서 일부 옵션은 여기서 자세히 설명하지 않아요. 아래 옵션 표를 notification 문서와 함께 보면서 이해하면 돼요. Element Plus는 호출을 위한 $message 메서드를 등록했어요. Message는 문자열이나 VNode를 매개변수로 받을 수 있고, 그 값이 본문으로 표시돼요.
import { h } from 'vue'
import { ElMessage } from 'element-plus'
const open = () => {
ElMessage('This is a message.')
}
const openVn = () => {
ElMessage({
message: h('p', { style: 'line-height: 1; font-size: 14px' }, [
h('span', null, 'Message can be '),
h('i', { style: 'color: teal' }, 'VNode'),
]),
})
}
타입 (Types)
Primary, Success, Warning, Info, Error 활동의 피드백을 보여줘요. 더 많은 커스터마이징이 필요할 때 Message 컴포넌트는 객체를 매개변수로 받을 수도 있어요. 예를 들어 type 값을 설정하면 다른 타입을 정의할 수 있고, 기본값은 info예요. 이 경우 본문은 message 값으로 전달돼요. 또한 타입별 메서드가 등록되어 있어서 open4처럼 type을 넘기지 않고 바로 호출할 수 있어요. primary는 2.9.11에서 추가되었어요.
import { ElMessage } from 'element-plus'
const open1 = () => {
ElMessage('This is a info message.')
}
const open2 = () => {
ElMessage({
message: 'Congrats, this is a success message.',
type: 'success',
})
}
const open3 = () => {
ElMessage({
message: 'Warning, this is a warning message.',
type: 'warning',
})
}
const open4 = () => {
ElMessage.error('Oops, this is a error message.')
}
const open5 = () => {
ElMessage.primary('This is a primary message.')
}
Plain 2.6.3
plain을 설정하면 평범한 배경을 사용해요.
import { ElMessage } from 'element-plus'
const open1 = () => {
ElMessage({
message: 'Congrats, this is a success message.',
type: 'success',
plain: true,
})
}
const open2 = () => {
ElMessage({
message: 'Warning, this is a warning message.',
type: 'warning',
plain: true,
})
}
const open3 = () => {
ElMessage({
message: 'This is a info message.',
type: 'info',
plain: true,
})
}
const open4 = () => {
ElMessage({
message: 'Oops, this is a error message.',
type: 'error',
plain: true,
})
}
const open5 = () => {
ElMessage({
message: 'This is a primary message.',
type: 'primary',
plain: true,
})
}
닫기 가능 (Closable)
닫기 버튼을 추가할 수 있어요. 기본 Message는 수동으로 닫을 수 없어요. 닫을 수 있는 메시지가 필요하다면 showClose 필드를 설정하면 돼요. notification과 마찬가지로 message는 제어 가능한 duration을 가져요. 기본 duration은 3000ms이고, 0으로 설정하면 자동으로 사라지지 않아요.
import { ElMessage } from 'element-plus'
const open1 = () => {
ElMessage({
showClose: true,
message: 'This is a info message.',
})
}
const open2 = () => {
ElMessage({
showClose: true,
message: 'Congrats, this is a success message.',
type: 'success',
})
}
const open3 = () => {
ElMessage({
showClose: true,
message: 'Warning, this is a warning message.',
type: 'warning',
})
}
const open4 = () => {
ElMessage({
showClose: true,
message: 'Oops, this is a error message.',
type: 'error',
})
}
const open5 = () => {
ElMessage({
showClose: true,
message: 'Oops, this is a message that does not automatically close.',
duration: 0,
})
}
const open6 = () => {
ElMessage({
showClose: true,
message: 'This is a primary message.',
type: 'primary',
})
}
HTML 문자열 사용 (Use HTML string)
message는 HTML 문자열을 지원해요. dangerouslyUseHTMLString을 true로 설정하면 message를 HTML 문자열로 취급해요.
WARNING
message속성이 HTML 문자열을 지원하기는 하지만, 웹사이트에서 임의의 HTML을 동적으로 렌더링하는 것은 XSS 공격을 유발하기 쉬워 매우 위험해요.dangerouslyUseHTMLString이 켜져 있을 때는message내용이 신뢰할 수 있는지 확인하고,message에 사용자 제공 내용을 절대 할당하지 마세요.
그룹화 (Grouping)
같은 내용의 메시지를 합쳐요. grouping을 true로 설정하면 같은 내용의 message가 병합돼요.
위치 배치 (Placement) 2.11.0
메시지가 나타나는 위치를 제어해요. 메시지는 뷰포트의 상단(기본값)이나 다른 위치에 표시할 수 있어요.
import { ElMessage } from 'element-plus'
import type { MessagePlacement, MessageType } from 'element-plus'
let topCount = 0
let bottomCount = 0
let topLeftCount = 0
let topRightCount = 0
let bottomLeftCount = 0
let bottomRightCount = 0
const openMsg = (placement: MessagePlacement = 'top') => {
let count = 0
let type: MessageType = 'success'
switch (placement) {
case 'top':
count = ++topCount
type = 'success'
break
case 'bottom':
count = ++bottomCount
type = 'warning'
break
case 'top-left':
count = ++topLeftCount
type = 'info'
break
case 'top-right':
count = ++topRightCount
type = 'primary'
break
case 'bottom-left':
count = ++bottomLeftCount
type = 'warning'
break
case 'bottom-right':
count = ++bottomRightCount
type = 'error'
break
}
ElMessage({
message: `This is a message from the ${placement} ${count}`,
type,
placement,
})
}
전역 메서드 (Global method)
Element Plus는 app.config.globalProperties에 전역 메서드 $message를 추가했어요. 그래서 vue 인스턴스에서 이 페이지에서 했던 것처럼 Message를 호출할 수 있어요.
로컬 임포트 (Local import)
import { ElMessage } from 'element-plus'
이 경우 ElMessage(options)로 호출해야 해요. 타입별 메서드도 등록되어 있어서 예를 들어 ElMessage.success(options)처럼 사용할 수 있어요. ElMessage.closeAll()을 호출해 모든 인스턴스를 수동으로 닫을 수도 있어요.
앱 컨텍스트 상속 (App context inheritance) 2.0.3
이제 message 생성자의 두 번째 매개변수로 컨텍스트를 받아 현재 앱의 컨텍스트를 주입하고 앱의 모든 속성을 상속할 수 있어요. 이렇게 사용할 수 있어요:
TIP
ElMessage컴포넌트를 전역 등록했다면 앱 컨텍스트를 자동으로 상속받아요.
import { getCurrentInstance } from 'vue'
import { ElMessage } from 'element-plus'
// in your setup method
const { appContext } = getCurrentInstance()!
ElMessage({}, appContext)
API
Options
| Name | Description | Type | Default |
|---|---|---|---|
| message | 메시지 텍스트 | string / VNode / Function | '' |
| type | 메시지 타입 | enum | info |
| plain 2.6.3 | 메시지가 plain인지 여부 | boolean | false |
| icon | 커스텀 아이콘 컴포넌트, type을 재정의해요 | string / Component | — |
| dangerouslyUseHTMLString | message를 HTML 문자열로 취급할지 여부 | boolean | false |
| customClass | Message의 커스텀 클래스 이름 | string | '' |
| duration | 표시 시간(밀리초). 0으로 설정하면 자동으로 꺼지지 않아요 | number | 3000 |
| showClose | 닫기 버튼 표시 여부 | boolean | false |
| onClose | 닫힐 때의 콜백 함수, 매개변수는 message 인스턴스 | Function | — |
| offset | 뷰포트 가장자리까지의 거리 (placement가 'top'이면 위쪽, 'bottom'이면 아래쪽) | number | 16 |
| placement 2.11.0 | 메시지 위치 | enum | top |
| appendTo | 메시지의 루트 요소 설정, 기본값은 document.body | CSSSelector / HTMLElement | — |
| grouping | 같은 내용의 메시지 병합. VNode message 타입은 미지원 | boolean | false |
| repeatNum | 반복 횟수, badge와 비슷. grouping과 함께 쓸 때 초기 값으로 사용돼요 | number | 1 |
Methods
Message와 this.$message는 현재 Message 인스턴스를 반환해요. 인스턴스를 수동으로 닫으려면 close를 호출하면 돼요.
| Name | Description | Type |
|---|---|---|
| close | Message 닫기 | Function |
더 알아보기 (Learn more)
- Loading 컴포넌트 — 로딩
- Message Box 컴포넌트 — 메시지 박스
- Notification 컴포넌트 — 전역 알림
- Element Plus 시작하기 — 프로젝트 설정