最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用vue-cli編寫(xiě)vue插件的方法

 更新時(shí)間:2018年02月26日 11:37:24   作者:Vicky-Rong  
本篇文章主要介紹了使用vue-cli編寫(xiě)vue插件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

利用vue組件創(chuàng)建模板,使用webpack打包生成插件再全局使用

1、vue init webpack-simple 生成項(xiàng)目目錄

2、調(diào)整目錄結(jié)構(gòu)

3、修改webpack.config.js

var path = require('path')
var webpack = require('webpack')

module.exports = {
 entry: './src/index.js',
 output: {
  path: path.resolve(__dirname, './dist'),
  publicPath: '/dist/',
  filename: 'vue-toast.js',
  // 打包后的格式(三種規(guī)范amd,cmd,common.js)通過(guò)umd規(guī)范可以適應(yīng)各種規(guī)范,以及全局window屬性
  libraryTarget:'umd',
 },
 module: {
  rules: [
   {
    test: /\.vue$/,
    loader: 'vue-loader',
   },
   {
    test: /\.js$/,
    loader: 'babel-loader',
    exclude: /node_modules/
   },
   
  ]
 },
 plugins:[]
} 

開(kāi)發(fā)一個(gè)toast插件,可以借助npm平臺(tái)發(fā)布,在這里就不做過(guò)多的說(shuō)明了

toast.vue

<template>
 <transition name="toast-fade">
  <div class="toast"
   :class="objClass" 
   v-show="isActive"
   @mouseenter="onMouseenter"
   @mouseleave="onMouseleave"
   >
   <button class="toast-close-button" @click="hide">×</button>
   <div class="toast-container">
    <div class="toast-title">{{title}}</div>
    <div class="toast-content">{{content}}</div>
   </div>
  </div>
 </transition>
</template>

<script>
export default {
 data: () => ({
  list: [],
  title: null,
  content: null,
  type: null,
  isActive: false,
  timer: null,
  onShow: () => {},
  onHide: () => {}
 }),
 computed: {
  objClass () {
   // 樣式'success, error, warning, default'
   return this.type ? 'toast-' + this.type : null
  }
 },
 methods: {
  // 顯示
  show (params) {
   let {content, title, onShow, onHide, type} = params
   this.type = type
   this.content = content
   this.title = title
   this.onShow = onShow
   this.onHide = onHide

   this.isActive = true
   this.setTimer()
  },

  // 隱藏
  hide () {
   this.isActive = false
  },

  // 計(jì)時(shí)器
  setTimer () {
   clearTimeout(this.timer)
   this.timer = setTimeout(() => {
    this.isActive = false
   }, 4000)
  },

  // 鼠標(biāo)移至組件時(shí)保持顯示狀態(tài)
  onMouseenter () {
   clearTimeout(this.timer)
  },

  // 鼠標(biāo)移開(kāi)組件時(shí)重新定時(shí)
  onMouseleave () {
   if (this.isActive) this.setTimer()
  }
 },
 watch: {
  isActive (val) {
   if (val && typeof this.onShow === 'function') {
    this.onShow()
   } else if (!val && typeof this.onHide === 'function') {
    this.onHide()
   }
  }
 }
}
</script>

<style>
.toast {
 position: fixed;
 top: 10px;
 right: 10px ;
 display: block;
 width: 300px;
 overflow: hidden;
 box-shadow: 0 0 6px #999;
 opacity: .8;
 border-radius: 3px 3px;
 padding: 15px 15px 15px 15px;
 background-position: 15px center;
 background-repeat: no-repeat;
 color: #333;
 background-color: #f0f3f4;
}

.toast-success {
 color: #fff;
 background-color: #51a351;
 padding: 15px 15px 15px 50px;
 background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
}
.toast-error {
 color: #fff;
 background-color: #bd362f;
 padding: 15px 15px 15px 50px;
 background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
}
.toast-warning {
 color: #fff;
 background-color: #f89406;
 padding: 15px 15px 15px 50px;
 background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
}
.toast:hover {
 opacity: 1;
 box-shadow: 0 0 18px #888;
 transition: all 200ms ease;
}
.toast-container {
 vertical-align: middle;
}

.toast-fade-enter, .toast-fade-leave-active {
 opacity: 0;
 transform: translateX(100%);
}
.toast-fade-leave-active,
.toast-fade-enter-active {
 transition: all 400ms cubic-bezier(.36,.66,.04,1);
}
.toast-title {
 font-size: 14px;
 font-weight: bold;
}
.toast-close-button {
  padding: 2px 2px;
  border: none;
  background: transparent;
  position: relative;
  right: -10px;
  top: -15px;
  float: right;
  font-size: 20px;
  font-weight: bold;
  color: #ffffff;
  -webkit-text-shadow: 0 1px 0 #ffffff;
  text-shadow: 0 1px 0 #ffffff;
  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
  filter: alpha(opacity=80);
}
</style>

index.js

import ToastComponent from './toast.vue'
let Toast = {};
Toast.install = function(Vue, options = {}) {
  // extend組件構(gòu)造器
  const VueToast = Vue.extend(ToastComponent)
  let toast = null
  function $toast(params) {
    return new Promise( resolve => {
      if(!toast) {
        toast = new VueToast()
        toast.$mount()
        document.querySelector(options.container || 'body').appendChild(toast.$el)
      }
      toast.show(params)
      resolve()
    })
  }
  Vue.prototype.$toast = $toast
}
if(window.Vue){
  Vue.use(Toast)
}
export default Toast

npm run build 之后就會(huì)在根目錄下生成dist文件

接下來(lái)就可以使用了

demo.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
 <!--引入-->
 <script src="node_modules/vue/dist/vue.js"></script>
 <script src="dist/vue-toast.js"></script>
</head>

<body>
 <div id="app">
  <h1>vue-toast,{{msg}}</h1>
  <div class="demo-box">
   <button @click="test">默認(rèn)效果</button>
  </div>
 </div>
 <script>
  var vm = new Vue({
   el: "#app",
   data: {
    msg: '你好'
   },
   methods: {
    test() {
      this.$toast({
       title:'消息提示',
       content: '您有一條新消息',
       type: 'warning',
       onShow: ()=>{
         console.log('on toast show')
       },
       onHide: ()=>{
         console.log('on toast hide')
       }
     })
    }
   }
  })

 </script>
</body>
</html>

總結(jié):

1、使用Vue構(gòu)造器,通過(guò)vue組件來(lái)創(chuàng)建一個(gè)子類(lèi):Vue.extend(component)

2、webpack配置output的path必須為絕對(duì)路徑

3、webpack基礎(chǔ)配置:entry,output,module,plugins

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue+vite+diff.js使用小結(jié)

    vue+vite+diff.js使用小結(jié)

    本文主要介紹了vue+vite+diff.js使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • Vue2項(xiàng)目升級(jí)到Vue3的詳細(xì)教程

    Vue2項(xiàng)目升級(jí)到Vue3的詳細(xì)教程

    看到好多開(kāi)源項(xiàng)目都升級(jí)了vue3,下面這篇文章主要給大家介紹了關(guān)于Vue2項(xiàng)目升級(jí)到Vue3的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • vite2.0 踩坑實(shí)錄

    vite2.0 踩坑實(shí)錄

    本文主要介紹了vite2.0 踩坑,記錄了一些在配置項(xiàng)目中遇到的問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue elementui表格獲取某行數(shù)據(jù)(slot-scope和selection-change方法使用)

    vue elementui表格獲取某行數(shù)據(jù)(slot-scope和selection-change方法使用)

    這篇文章主要介紹了vue elementui表格獲取某行數(shù)據(jù)(slot-scope和selection-change方法使用),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Vue通過(guò)字符串關(guān)鍵字符實(shí)現(xiàn)動(dòng)態(tài)渲染input輸入框

    Vue通過(guò)字符串關(guān)鍵字符實(shí)現(xiàn)動(dòng)態(tài)渲染input輸入框

    這篇文章主要為大家詳細(xì)介紹了Vue如何通過(guò)字符串關(guān)鍵字符實(shí)現(xiàn)動(dòng)態(tài)渲染input輸入框。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • vue3如何在setup中獲取DOM元素

    vue3如何在setup中獲取DOM元素

    這篇文章主要介紹了vue3如何在setup中獲取DOM元素問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue實(shí)現(xiàn)富文本編輯器詳細(xì)過(guò)程

    vue實(shí)現(xiàn)富文本編輯器詳細(xì)過(guò)程

    Vue富文本的實(shí)現(xiàn)可以使用一些現(xiàn)成的第三方庫(kù),如Quill、Vue-quill-editor、wangEditor等,這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)富文本編輯器的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • vue頁(yè)面右下角添加懸浮按鈕組件的方法代碼

    vue頁(yè)面右下角添加懸浮按鈕組件的方法代碼

    這篇文章主要介紹了vue頁(yè)面右下角添加懸浮按鈕組件的方法代碼,在Vue項(xiàng)目中,通過(guò)在頂層路由文件中添加代碼,可以實(shí)現(xiàn)頁(yè)面左下角懸浮按鈕的功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • 一文帶你掌握Vue中keep-alive的使用技巧

    一文帶你掌握Vue中keep-alive的使用技巧

    這篇文章主要來(lái)和大家一起深入探討下Vue中keep-alive?的作用及其使用方法,幫助開(kāi)發(fā)者在實(shí)際項(xiàng)目中充分利用這一功能實(shí)現(xiàn)高效的組件管理
    2024-11-11
  • vue中style設(shè)置scoped后部分樣式不生效的解決

    vue中style設(shè)置scoped后部分樣式不生效的解決

    這篇文章主要介紹了vue中style設(shè)置scoped后部分樣式不生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評(píng)論

盱眙县| 大连市| 棋牌| 巨野县| 金阳县| 鄂伦春自治旗| 汾西县| 蓬溪县| 江达县| 古丈县| 彝良县| 金寨县| 五指山市| 大新县| 南通市| 连南| 白银市| 女性| 富阳市| 英吉沙县| 礼泉县| 城市| 彰武县| 北辰区| 定南县| 若羌县| 象山县| 白山市| 教育| 北流市| 永州市| 新晃| 寻乌县| 图木舒克市| 庆元县| 鞍山市| 田东县| 康马县| 竹北市| 江永县| 中江县|