>웹 프론트엔드 >JS 튜토리얼 >Vue(코드) 내 팝업 플러그인 적용 방법

Vue(코드) 내 팝업 플러그인 적용 방법

不言
不言원래의
2018-09-08 17:54:182052검색

이 글의 내용은 Vue의 팝업 플러그인 적용 방법(코드)에 대한 내용입니다. 참고가 필요한 친구들에게 도움이 되었으면 좋겠습니다.

Vue는 모바일 단말기를 만들 때 팝업창이 필요한 경우가 종종 있습니다. 간단한 기능을 갖춘 vue 팝업창입니다.

popup.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 &#39;@/components/popup&#39;
  ...
    this.$refs.popup.open()
   ...
</script>

Vue(코드) 내 팝업 플러그인 적용 방법

插件化

组件功能写好了,但是这种调用方式显得很累赘。举个例子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;">Vue(코드) 내 팝업 플러그인 적용 방법

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(&#39;弹窗消息&#39;)
  ...
</script>

플러그인을 등록하고rrreee vue 프레임워크 내에서 호출하는 것이 매우 편리합니다

rrreee

관련 권장 사항:

🎜🎜sweetalert2 팝업 사용 방법 Vue 프로젝트의 플러그인🎜🎜🎜🎜Vue의 토스트 팝업 구성 요소 사용 방법🎜🎜🎜🎜

위 내용은 Vue(코드) 내 팝업 플러그인 적용 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.