이 글의 내용은 Vue의 팝업 플러그인 적용 방법(코드)에 대한 내용입니다. 참고가 필요한 친구들에게 도움이 되었으면 좋겠습니다.
Vue는 모바일 단말기를 만들 때 팝업창이 필요한 경우가 종종 있습니다. 간단한 기능을 갖춘 vue 팝업창입니다.
<template> <div> <div>{{text}}</div> </div> </template>
컴포넌트 html 구조, 외부 레이어 p위치:고정 위치 지정, 내부 p는 팝업 콘텐츠를 표시합니다. position:fixed
定位, 内层p显示弹窗内容
export default { name: 'popup', props: { text: { //文字内容 type: String, default: '' }, time: { //显示的时长 type: Number, default: 3e3 }, }, data(){ return { visible: false } }, methods: { open() { this.visible = true clearTimeout(this.timeout); this.$emit('show') if(this.time > 0){ this.timeout = setTimeout(() => { this.hide() }, this.time) } }, hide() { this.visible = false this.$emit('hide') clearTimeout(this.timeout); } } }
popup.vue只有2个属性: 文本和显示时间。组件显示隐藏由内部属性visible控制,只暴露给外界open和hide2个方法,2个方法触发对应的事件
测试一下
<template> <popup></popup> </template> <script> import Popup from '@/components/popup' ... this.$refs.popup.open() ... </script>
组件功能写好了,但是这种调用方式显得很累赘。举个例子layer.js的调用就是layer.open(...)没有import,没有ref,当然要先全局引用layer。我们写的弹窗能不能这么方便呢,为此需要把popup改写成vue插件。
说是插件,但能配置属性调用方法的还是组件本身,具体是实例化的组件,而且这个实例必须是全局单例,这样不同vue文件唤起popup的时候才不会打架
生成单例
// plugins/popupVm.js import Popup from '@/components/popup' let $vm export const factory = (Vue)=> { if (!$vm) { let Popup = Vue.extend(PopupComponent) $vm = new Popup({ el: document.createElement('p') }) document.body.appendChild($vm.$el) } return $vm }
组件实例化后是添加在body上的,props
// plugins/util.js export const setProps = ($vm, options) => { const defaults = {} Object.keys($vm.$options.props).forEach(k => { defaults[k] = $vm.$options.props[k].default }) const _options = _.assign({}, defaults, options) for (let i in _options) { $vm.$props[i] = _options[i] } }popup.vue에는 텍스트와 표시 시간이라는 두 가지 속성만 있습니다. 구성 요소의 표시 및 숨기기는 visible 속성에 의해 제어됩니다. open 및 hide라는 두 가지 방법을 통해서만 외부에 노출됩니다. -align: center;">Plug-in컴포넌트 함수를 작성해 놓았는데 이 호출 방법이 많이 번거로워 보입니다. 예를 들어, layer.js의 호출은 import나 ref 없이 layer.open(...)입니다. 물론, 레이어는 먼저 전역적으로 참조되어야 합니다. 우리가 작성하는 팝업창이 이렇게 편리할 수 있을까요? 이런 이유로 팝업을 vue 플러그인으로 다시 작성해야 합니다.
플러그인이라고 하는데 속성 호출 방법을 구성할 수 있는 구성 요소 자체, 특히 인스턴스화된 구성 요소이며 이 인스턴스는 전역 싱글톤이어야 하므로 다른 vue 파일을 사용할 때 싸움이 발생하지 않습니다. evoke popups
싱글톤 생성 // plugins/popupPlugin.js
import { factory } from './popupVm'
import { setProps } from './util'
export default {
install(Vue) {
let $vm = factory(Vue);
const popup = {
open(options) {
setProps($vm, options)
//监听事件
typeof options.onShow === 'function' && $vm.$once('show', options.onShow);
typeof options.onHide === 'function' && $vm.$once('hide', options.onHide);
$vm.open();
},
hide() {
$vm.hide()
},
//只配置文字
text(text) {
this.open({ text })
}
}
Vue.prototype.$popup = popup
}
}
구성 요소는 인스턴스화 후 본문에 추가됩니다. props
는 HTML로 작성할 수 없으며 js로 제어해야 합니다. main.js에서 속성이 계속 작동합니다
//main.js import Vue from 'vue' import PopupPlugin from '@/plugins/popupPlugin' Vue.use(PopupPlugin)
<script> ... this.$popup.text('弹窗消息') ... </script>
플러그인을 등록하고rrreee vue 프레임워크 내에서 호출하는 것이 매우 편리합니다
rrreee관련 권장 사항:
🎜🎜sweetalert2 팝업 사용 방법 Vue 프로젝트의 플러그인🎜🎜🎜🎜Vue의 토스트 팝업 구성 요소 사용 방법🎜🎜🎜🎜위 내용은 Vue(코드) 내 팝업 플러그인 적용 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!