方法一:

1、写插件:

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

toastr.vue 的内容如下:

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

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

2. 本地测试

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

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

2.2 在 main.js 中引入

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

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

<template>
<div id="app">
<toastr :msg = "'测试'" :isShow = "true"/>
</div>
</template> <script>
export default {
name: 'app'
}
</script> <style lang="scss">
</style>

方法二:

1、写插件:

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

toastr.vue 的内容如下:

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

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

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

2. 本地测试

2.1 在 main.js 中引入:

// 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: '<App/>'
})

2.2 在 App.vue 中使用 toastr:

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

比较:

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

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

vue插件开发的两种方法:以通知插件toastr为例的更多相关文章

  1. jQuery插件开发的两种方法及$.fn.extend的详解(转)

    jQuery插件开发的两种方法及$.fn.extend的详解 jQuery插件开发分为两种:1 类级别.2 对象级别,下面为大家详细介绍下   jQuery插件开发分为两种: 1 类级别 类级别你可以 ...

  2. jQuery插件开发的两种方法及$.fn.extend的详解

    jQuery插件开发分为两种: 1 类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.ex ...

  3. jQuery插件开发的两种方法

    1 类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(object); $. ...

  4. 解决vue项目eslint校验 Do not use 'new' for side effects 的两种方法

    import Vue from 'vue' import App from './App.vue' import router from './router' new Vue({ el: '#app' ...

  5. Vue 创建组件的两种方法

    地址:https://blog.csdn.net/cofecode/article/details/74634301 创建组件的两种方法 1.全局注册 2.局部注册 var child=Vue.ext ...

  6. 两种方法使vue实现jQuery调用

    引言 如果说vue是前端工程化使用较多的骨架,那么JavaScript就是我们的前端的细胞.MVVM模式让我们体验到前端开发的便携,无需再过多的考虑DOM的操作.而vue的渐进式开发(逐步引用组件,按 ...

  7. vue里使用element饿了么的el-menu+vue-router实现路由跳转的两种方法

    最近准备写一个echarts的可视化展示案例,首先用vue-cli3创建了一个项目(好像vue-cli4也出来,感觉变化不大,就没升级了) 然后,开始配置路由↓下面是我的router.js文件 imp ...

  8. vue中使用echarts的两种方法

    在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...

  9. 安卓ListView操作的两种方法

    举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...

随机推荐

  1. 基于licode搭建webrtc服务器

    0. 前言 licode官网文档安装教程十分简单, 但是实际搭建过程是很艰辛的. 官方文档没有提示说会遇到什么样的问题, 实际过程中可能遇到各种各样的问题, 在解决的时候费时费力, 我就总结一下自己在 ...

  2. 1-python django的创建

    一.Virtualenv(我的python环境是3.7) 1.虚拟环境创建(针对python版本和django的版本不一致的) 输入 pip install virtuallenv ,看到如下信息就是 ...

  3. C Looooops

    看了半天的同余 扩展欧几里得 练练手 C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27079   A ...

  4. Java进阶开发-基于Base64的加密与解密操作

    基于Base64的加密与解密操作 正常来讲加密基本上永远伴随着解密,所谓的加密或者解密往往都是需要有一些所谓的规则.在JDK1.8开始提供有一组新的加密处理操作,Base64处理.在这个类里面有两个内 ...

  5. [转载]python with语句的用法

    https://www.cnblogs.com/DswCnblog/p/6126588.html 看这篇文章的时候看到了python的类名()用法,很好奇,上网查了下,原来这就相当于对类进行实例化了. ...

  6. CSS模块化:less

    less的安装与基本使用 less的语法及特性 一.本地使用less的方法 Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言.是一种动态样式语言,属于c ...

  7. Json-server在Vue 2.0中使用--build文件中没有dev-server文件

    跟大佬的视频使用json-server模拟后台数据调用,发现build文件中并没有dev-server.js. 新版的vue-cli取消了dev-server.js和dev-client.js   改 ...

  8. Google 开源的 Python 命令行库:初探 fire

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  9. C# 基础 字符串 集合 文件操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. Linux FTP 命令全集

    Linux FTP 命令全集 1 前言 下面就所有命令给出解释和例子. 说明:  1. remote-file 指远程文件,即服务器上的文件 2. local-file  指本地文件,即本地机器上的文 ...