Vue 3 메시지 메시지 구성 요소 예제 구현
구성 요소 최종 구현 효과
구성 요소 설계
최종 구성 요소 API 정의
간단 한 Message 메시지 구성 요 소 를 실현 합 니 다.형식 API 는 텍스트(text),성공(success),실패(error)가 있 습 니 다.즉,텍스트 를 직접 전송 하 는 것 도 지원 하고 구성 요 소 를 통 해 구체 적 인 option 설정 을 지원 합 니 다.메시지 내용 을 정의 하고 닫 기 지연,닫 기 단 추 를 보 여 주 는 지 여부 등 기능 을 지원 합 니 다.
// Message (type): 、 、
["text", "success", "error"]
// Message (option)
[String]:
[Object]:
// option
text [String] ""
duration [Number] 0 ,0
close [Boolean] false
//
Message[type](option);
호출 예시
Message.text(" ");
Message.error({
text: " , ",
duration: 3000,
close: true
});
구성 요소 구조 정의Message 폴 더 저장 구성 요소 의 전체 구 조 를 만 듭 니 다.src 에는 구성 요소 의 템 플 릿,스타일,인 스 턴 스 파일 이 포함 되 어 있 습 니 다.같은 단계 에서 index.js 를 만 들 면 프로젝트 와 업무 구성 요소 에 전체 구성 요 소 를 노출 시 킵 니 다.
|--- Message
|--- src
| |--- Message.vue //
| |--- Message.less //
| |--- Message.js //
| |--- Instance.js //
|---index.js //
템 플 릿 과 스타일템 플 릿 템 플 릿
템 플 릿 은 상대 적 으로 간단 합 니 다.바깥쪽 은 애니메이션 구성 요소 로 감 싸 고 v-show 를 통 해 메시지 표시 와 닫 기 를 제어 합 니 다.내용 부분 은 아이콘,메시지 텍스트,그리고 설정 가능 한 수 동 닫 기 단 추 를 포함 합 니 다.
<template>
<!-- -->
<transition name="slide-fade">
<div class="message-container" v-show="visibled">
<!-- -->
<div class="message-content">
<!-- , ,text -->
<div class="message-icon" v-if="config.icon">
<i :class="config.icon"></i>
</div>
<!-- -->
<span v-text="config.content"></span>
<!-- -->
<div class="option" v-if="!config.close">
<i class="ri-close-fill" @click="onClose"></i>
</div>
</div>
</div>
</transition>
</template>
메시지 아이콘주의해 야 할 것 은 아이콘 은 호출 API 의 형식 으로 확 정 됩 니 다.인 스 턴 스 를 만 들 때 아이콘 형식 을 확인 합 니 다.여 기 는 원본 아이콘 라 이브 러 리 Remix Icon 을 참조 합 니 다.구체 적 인 인용 방법 은 더 이상 설명 하지 않 습 니 다.주소:remixicon.cn/
양식
Message.less 에서 스타일 과 애니메이션 을 정의 합 니 다.
@radius: 4px;
@normalHeight: 34px;
.message {
position: fixed;
top: 0;
left: 0;
width: 100%;
text-align: center;
box-sizing: border-box;
z-index: 9999;
transform: translateZ(9999px);
padding-top: 28px;
transition: top .4s ease;
.message-container {
margin-bottom: 14px;
.message-icon {
display: inline-block;
i {
font-size: 18px;
font-weight: 400;
margin-top: -3px;
margin-right: 6px;
display: inline-block;
box-sizing: border-box;
vertical-align: middle;
}
.ri-checkbox-circle-fill {
color: #58c05b;
}
.ri-close-circle-fill {
color: #fd4f4d;
}
.message-content {
display: inline-block;
padding: 4px 18px;
height: @normalHeight;
text-align: left;
line-height: @normalHeight;
font-size: 14px;
font-weight: 400;
border-radius: @radius;
color: #595959;
box-shadow: 0 4px 12px rgba(0, 0, 0, .15);
background: #ffffff;
.option {
display: inline-block;
pointer-events: all;
margin-left: 18px;
i {
font-size: 18px;
font-weight: 400;
margin-top: -3px;
display: inline-block;
box-sizing: border-box;
vertical-align: middle;
cursor: pointer;
color: #d9d9d9;
transition: color 0.2s ease;
&:hover {
color: #ff7c75;
transition: color 0.2s ease;
}
}
}
}
}
.slide-fade-enter-active {
transition: all .2s ease-out;
}
.slide-fade-leave-active {
transition: all .2s ease;
}
.slide-fade-enter-from,
.slide-fade-leave-to {
transform: translateY(-20px);
opacity: 0;
}
}
구성 요소 스 크 립 트구성 요소 에서 들 어 오 는 config 설정 과 reove 를 가 져 와 렌 더 링 과 마 운 트 취 소 를 실현 합 니 다.onOpen 과 onClose 방법 으로 메시지 가 열 리 고 수 동 으로 닫 히 는 것 을 제어 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
<script>
import { reactive, toRefs } from "vue";
export default {
props: {
config: { type: Object, default: () => {} }, //
remove: { type: Function, default: () => {} }, //
},
setup(props) {
const state = reactive({
visibled: false,
})
//
const onOpen = (config) => {
setTimeout(() => {
state.visibled = true;
}, 10)
//
if (config.duration !== 0) {
setTimeout(() => {
onClose();
}, config.duration);
}
}
onOpen(props.config)
//
const onClose = () => {
state.visibled = false;
setTimeout(() => {
props.remove()
}, 200)
};
return {
...toRefs(state),
onOpen,
onClose,
};
},
};
</script>
구성 요소 인 스 턴 스 생 성다음은 Instance.js 에서 구성 요소 호출 을 작성 할 때 구성 요소 등 API 를 만 들 고 마 운 트 하 며 삭제 합 니 다.머리 에 Vue 의 생 성 인 스 턴 스 방법 과 위 에 적 힌 구성 요소 템 플 릿 을 도입 합 니 다.
import { createApp } from 'vue'
import Message from './Message.vue'
인 스 턴 스 작업 방법 을 설명 하고 메시지 설정 매개 변수 cfg 를 받 습 니 다.
/**
* Message
* @param {Object} cfg
*/
const createInstance = cfg => {
const config = cfg || {}
// 1、 , Class 、
// 2、 body
// 3、 ,
}
export default createInstance
1.패키지 용 기 를 만 들 고 외부 클래스 속성 을 설정 합 니 다.외부 용기 패키지 구성 요소 로 DIV 를 만 들 고 대응 하 는 class 속성 을 설정 합 니 다.
let messageNode = document.createElement('div')
let attr = document.createAttribute("class")
attr.value = "message"
messageNode.setAttributeNode(attr)
메시지 개수,메시지 상자 의 높이 를 54 px 로 정의 합 니 다.여러 메시지 가 줄 을 서서 열 릴 때 top 값 을 설정 하여 각 구성 요 소 를 엇 갈 리 게 합 니 다.
const height = 54 //
const messageList = document.getElementsByClassName('message')
messageNode.style.top = `${messageList.length * height}px`
2.인 스 턴 스 를 만 들 고 body 에 마 운 트 하기
const app = createApp(Message, {
config,
remove() {
handleRemove()// , Dom
}
})
// body
app.vm = app.mount(messageNode)
document.body.appendChild(messageNode)
app.close = () => {
handleRemove()
}
return app
3.마 운 트 를 취소 하고 top 값 을 다시 설정 하 는 방법 을 정의 합 니 다.
const handleRemove = ()=>{
app.unmount(messageNode)
document.body.removeChild(messageNode)
resetMsgTop()
}
const resetMsgTop = () => {
for (let i = 0; i < messageList.length; i++) {
messageList[i].style.top = `${i * height}px`
}
}
렌 더 링 인 스 턴 스 API 구현Message.js 를 통 해 설정 을 읽 고 렌 더 링 합 니 다.
import createInstance from './Instance.js'
/**
* Message
* @param {Object} typeCfg
* @param {Object/String} cfg
*/
function renderMsg(typeCfg = {}, cfg = '') {
// , cfg
const isContent = typeof cfg === 'string'
//
cfg = isContent ? {
content: cfg
} : cfg
const config = Object.assign({}, typeCfg, cfg) //
const {
type = 'text', //
content = '', //
duration = 3000, //
close = false //
} = config
//
return createInstance({
type,
content,
duration,
close
})
}
text,success,error 등 API 를 노출 합 니 다.
export default {
//
text(cfg = "") {
const textCfg = {
type: "text",
icon: ''
}
return renderMsg(textCfg, cfg);
},
//
success(cfg = "") {
const successCfg = {
type: "success",
icon: 'ri-checkbox-circle-fill'
}
return renderMsg(successCfg, cfg);
},
//
error(cfg = "") {
const errorCfg = {
type: "error",
icon: 'ri-close-circle-fill'
}
return renderMsg(errorCfg, cfg);
},
}
마지막 으로 호출 할 수 있 도록 가장 바깥쪽 index.js 에서 이 구성 요 소 를 엽 니 다.
import Message from './src/Message.js';
export default Message;
Vue 3 구현 Message 메시지 구성 요소 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Vue 3 Message 메시지 구성 요소 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vue-cli v4.5.0을 사용하여 Vue 3 프로젝트 만들기어제 (7/24)에 이 출시되었습니다. 이렇게하면 vue-cli에서 한 번에 Vue 3 프로젝트를 만들 수 있습니다. (지금까지는 Vue 2 프로젝트를 만든 후에 Vue 3으로 업그레이드해야했습니다.) 바로 프로젝트...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.