ホームページ  >  記事  >  ウェブフロントエンド  >  vueでのポップアッププラグインの適用方法(コード)

vueでのポップアッププラグインの適用方法(コード)

不言
不言オリジナル
2018-09-08 17:54:181973ブラウズ

この記事の内容は、Vue のポップアップ プラグインの適用方法 (コード) に関するものです。必要な方は参考にしていただければ幸いです。

Vue は、モバイル端末を作成するときによくポップアップ ウィンドウの必要性に遭遇します。これは、単純な関数を備えた vue ポップアップ ウィンドウです。

popup.vue

<template>
  <div>
    <div>{{text}}</div>
  </div>
</template>

コンポーネント HTML 構造、外層 pposition:fixed。 の配置で、内側の 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 には、テキストと表示時間の 2 つの属性しかありません。コンポーネントの表示と非表示は、open と Hide の 2 つのメソッドを通じてのみ外部に公開されます

テストしてください

// 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
  }
}

vueでのポップアッププラグインの適用方法(コード)

Plug-in

コンポーネント関数は記述できましたが、この呼び出し方法は非常に面倒そうです。たとえば、layer.js の呼び出しは、import または ref を使用せずに、layer.open(...) になります。もちろん、レイヤーは最初にグローバルに参照される必要があります。私たちが作成したポップアップ ウィンドウはそれほど便利でしょうか? このため、ポップアップを vue プラグインに書き直す必要があります。 プラグインと言われていますが、属性呼び出しメソッドを設定できるのはコンポーネント自体であり、具体的にはインスタンス化されたコンポーネントであり、このインスタンスはグローバルシングルトンである必要があり、異なるvueファイルが存在する場合に競合が発生しないようにしますポップアップを呼び出す

シングルトンを生成する

//main.js
import Vue from 'vue'
import PopupPlugin from '@/plugins/popupPlugin'

Vue.use(PopupPlugin)
コンポーネントはインスタンス化後にボディに追加されます。 props は HTML では記述できず、js で制御する必要があります。 main.js で属性の機能が継続します
<script>
  ...
    this.$popup.text(&#39;弹窗消息&#39;)
  ...
</script>
rrreee プラグイン

rrreee

を登録し、vue フレームワーク内で呼び出すと非常に便利です🎜rrreee🎜 関連する推奨事項: 🎜🎜🎜 sweetalert2 ポップアップの使用方法vue プロジェクトのプラグイン🎜🎜🎜🎜vue のトースト ポップアップ コンポーネントの使用方法🎜🎜🎜🎜

以上がvueでのポップアッププラグインの適用方法(コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。