详解使用webpack打包编写一个vue-toast插件(2)
实践
需求:一个toast弹层功能
1、template.vue。提供html模板
<template> <section class="toast-container" :class="visible?'fade-in':'fade-out'"> <div class="toast"> <span>{{message}}</span> </div> </section> </template> <script> export default { name:'tmp', data(){ return{ visible:true, message:'默认提示语' } } } </script> <style> </style>
2、index.js
import ToastComponent from './vue-toast.vue' let Toast = {} Toast.install = function(Vue,options){ var opt={ duration:3000, } for(var key in options){ opt[key] = options[key]; } Vue.prototype.$toast=function(msg,option){ if(typeof option =='object'){ for(var key in option){ opt[key]=option[key] } } const ToastController= Vue.extend(ToastComponent); var instance = new ToastController().$mount(document.createElement('div')) instance.message = msg; instance.visible = true; document.body.appendChild(instance.$el) setTimeout(()=>{ instance.visible=false; document.body.removeChild(instance.$el) },opt.duration) } Vue.prototype.$toast['show']=function(msg,option){ Vue.prototype.$toast(msg,option); } } if(window.Vue){ Vue.use(Toast) } export default Toast;
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 for mobile{{msg}}</h1> <div class="demo-box"> <button @click="test">默认效果</button> <button>5s后自动关闭</button> <button>消失后执行回调</button> </div> </div> <script> var vm = new Vue({ el:"#app", data:{ msg:'你好' }, methods:{ test(){ // 使用 this.$toast.show('再来',{ duration:1000 }) } } }) </script> </body> </html>
总结
- 使用基础Vue构造器,通过vue组件来创建一个子类:Vue.extend(component)
- 编写vue插件的四种方法:常用-Vue.prototype.$method, 其他:Vue.method,Vue.mixin(option),Vue.directive(‘method',option)
- webpack配置output的path必须为绝对路径
- webpack配置三大属性,entry,output,module,plugins
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持黑区网络。