热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue插件开发的两种方法:以通知插件toastr为例

方法一:1、写插件:在src文件夹下面建lib文件夹用于存放插件,lib文件夹下再建toastr文件夹,在toastr文件夹下新建 toastr.js和toastr.vue两个文件。整个项目目录如下所示:​toastr.vue的内容如下:<template><divclass"vue

方法一:

1、写插件:

在 src 文件夹下面建 lib 文件夹用于存放插件,lib 文件夹下再建toastr文件夹,在toastr文件夹下新建 toastr.js 和 toastr.vue两个文件。整个项目目录如下所示:

toastr.vue 的内容如下:

\n    
\n {{message}}\n
\n\n\n\n\n","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><template> <div class="vue-toastr-wraper" v-show="isShow"> {{message}} div> template> <script> export default { name:'toastr', props:{ message:{ default:"", type:String }, isShow:{ default:false, type:Boolean } }, mounted(){ if(this.isShow){ setTimeout(() => { this.isShow = false },2500); } } } script> <style scoped> .vue-toastr-wraper{ background: rgba(0, 0, 0, 0.6); color: #fff; font-size: 17px; padding: 10px; border-radius:12px; display: -webkit-box; -webkit-box-pack: center; -webkit-box-align: center; position: fixed; top: 50%; left: 50%; z-index: 2000; -webkit-transform: translateY(-50%); transform: translateY(-50%); -webkit-transform: translateX(-50%); transform: translateX(-50%); } style>
vue插件开发的两种方法:以通知插件toastr为例

toastr.vue 是做一个弹出提示,其中传入的参数有两个:message和 isShow,分别表示提示消息以及是否显示提示。

toastr.js中写install方法,内容如下:

import VueToastrPlugin from './toastr.vue'

const toastrPlugin = {
    install: function(Vue) {
        Vue.component(VueToastrPlugin.name, VueToastrPlugin)
    }
}

// global 情况下 自动安装
if (typeof window !== 'undefined' && window.Vue) {
    window.Vue.use(toastrPlugin)
}

// 导出模块
export default toastrPlugin
vue插件开发的两种方法:以通知插件toastr为例

2. 本地测试

本插件的功能就这么多,因为我们尚未发布,所以先进行本地测试。

2.1 将 App.vue 多余代码删除。

2.2 在 main.js 中引入 

 h(App)\n})","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">import Vue from 'vue'
import App from './App.vue'

import Toastr from './lib/toastr/toastr.js'
Vue.use(Toastr)

new Vue({
  el: '#app',
  render: h => h(App)
})
vue插件开发的两种方法:以通知插件toastr为例

2.3 在 App.vue 中使用 toastr (别忘记需要传递的参数)

\n  
\n \n
\n\n\n\n\n","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><template> <div id="app"> <toastr :msg = "'测试'" :isShow = "true"/> div> template> <script> export default { name: 'app' } script> <style lang="scss"> style>
vue插件开发的两种方法:以通知插件toastr为例

方法二:

1、写插件:

在 src 文件夹下面建 lib 文件夹用于存放插件,lib 文件夹下再建toastr文件夹,在toastr文件夹下新建 toastr.js 和 toastr.vue两个文件。整个项目目录如下所示:

toastr.vue 的内容如下:

\n    \n        
\n {{message}}\n
\n
\n\n\n\n\n","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><template> <transition name="fade"> <div class="toast" v-show="show"> {{message}} div> transition> template> <script> export default { data() { return { show: false, message: "" }; } }; script> <style lang="scss" scoped> .toast { position: fixed; top: 50%; left: 50%; margin-left: -100px; margin-top: -30px; padding: 2vw; width: 200px; height: 60px; overflow-y: auto; font-size: 14px; color: #fff; text-align: left; background-color: rgba(0, 0, 0, 0.8); border-radius: 3px; z-index: 999; } .fade-enter-active, .fade-leave-active { transition: 0.3s ease-out; } .fade-enter { opacity: 0; transform: scale(1.2); } .fade-leave-to { opacity: 0; transform: scale(0.8); } style>
vue插件开发的两种方法:以通知插件toastr为例

toastr.js中写install方法,内容如下:

 {\n        instance.message = msg;\n        instance.show = true;\n\n        setTimeout(() => {\n            \n            instance.show = false;\n        }, duration);\n    }\n}\n\nexport default Toast","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">import ToastComponent from './toastr.vue'

const Toast = {};

// 注册Toast
Toast.install = function (Vue) {
    // 生成一个Vue的子类
    // 同时这个子类也就是组件
    const ToastCOnstructor= Vue.extend(ToastComponent)
    // 生成一个该子类的实例
    const instance = new ToastConstructor();

    // 将这个实例挂载在我创建的div上
    // 并将此div加入全局挂载点内部
    instance.$mount(document.createElement('div'))
    document.body.appendChild(instance.$el)
    
    // 通过Vue的原型注册一个方法
    // 让所有实例共享这个方法 
    Vue.prototype.$toast = (msg, duration = 2000) => {
        instance.message = msg;
        instance.show = true;

        setTimeout(() => {
            
            instance.show = false;
        }, duration);
    }
}

export default Toast
vue插件开发的两种方法:以通知插件toastr为例

2. 本地测试

2.1 在 main.js 中引入:

'\n})","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import Toast from './lib/toastr/toastr.js'

Vue.use(Toast)

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: ''
})
vue插件开发的两种方法:以通知插件toastr为例

2.2 在 App.vue 中使用 toastr:

\n  
\n \n
\n\n\n\n\n","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">// app.vue <template> <div id="app"> <button @click="toast">显示taost弹出框button> div> template> <script> export default { name: "app", methods: { toast() { this.$toast("你好"); } } }; script> <style> #app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } style>
vue插件开发的两种方法:以通知插件toastr为例

比较:

以上介绍了这两种不同的插件编写方法,貌似没有什么不一样啊,真的是这样么?

来看一下以上完整的main.js和app.vue两个文件发现,第一个toastr是显示的写在app.vue模板里的,而第二个toastr并没有作为一个组件写入,仅仅是通过一个方法控制显示。


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文讨论了在dva中引入antd组件table时没有显示样式的问题。提供了.roadhogrc文件的配置,包括环境和import的设置。同时介绍了extraBabelPlugins和transform-runtime的使用方法,并解释了libraryName和css的含义。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
author-avatar
shyaiqq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有