vue自定义插件及使用

一、Vue插件有什么用

插件通常会为 Vue 添加全局功能。
所谓全局:
即不需要像组件那样,每次使用他前都需要先引入一次。对于插件只要在最开始引入一次,在任何组件就可以直接使用。(类似于我们在window上添加的方法属性那样,任何地方都可以用)
插件能实现的功能没有限制,不过常见下面几种:

通过插件,添加全局方法或者属性
通过插件,添加全局资源:指令/过滤器/过渡等
通过插件(使用全局 mixin 方法),添加一些组件选项
通过插件,添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。
一个库,提供自己的 API,同时提供上面提到的一个或多个功能,如 vue-router

二、插件原理

所谓vue插件其实就是一个简单的js对象而已,然后这个插件对象有一个公开属性 install ,他的值为一个函数,此函数接受两个参数。第一个参数是 Vue 构造器 , 第二个参数是一个可选的选项对象。

三、插件编写及举例

1、编写插件

// install函数

let Valid = {}
Valid.install = function(Vue, options = { triggEvent: "input" }) {
    // static props 静态属性
    // Vue.t1703C="hello everyone"
    // Vue.t1703C = "1703C"
    // console.log(this) this指向vue  可一直往上查找,可查找到new Vue

    // 所有需要验证的组成一个列表
    let regList = [{
        "type": "phone",
        "RegExp": /^1[345679]\d{9}$/,
        "msg": "手机需要11位数字"
    }, {
        "type": "pwd",
        "RegExp": /\w{6,9}/
    }, {
        "type": "code",
        "RegExp": /\d{4}/
    }]

    Vue.directive("valid", {
        bind(el, binding) {
            // el:dom节点 binding:对象(可使用value)
            // console.log(binding)

            // 失去焦点事件
            el.addEventListener(options.triggEvent, function(e) {
                // console.log(e.target.value)

                // 找到符合条件的对象
                let validObj = regList.find(item => item.type === binding.value)
                if (validObj.RegExp.test(e.target.value)) {
                    console.log("验证通过")
                    e.target.classList.remove(options.errorClass)
                } else {
                    // let span = document.createElement("span");
                    // span.innerText = validObj.msg
                    // e.target.parentNode.appendChild(span)
                    console.log("格式错误")
                    e.target.classList.add(options.errorClass)
                }

            })
        }
    })
}
export default Valid

2、使用
使用插件的时候,在main.js入口文件import引入,再使用use()方法使用即可

import Vue from ‘vue‘
import App from ‘./App.vue‘
import router from ‘./router‘
import store from ‘./store‘
import ElementUI from ‘element-ui‘;
import ‘element-ui/lib/theme-chalk/index.css‘;//引入axios
import $http from "@/plugins/$http";//引入自定义插件插件  v-vaild
import Valid from "@/plugins/validator";

Vue.config.productionTip = false
Vue.use(ElementUI);//全局的axios
Vue.use($http, { timeout: 2000 });//自定义插件
Vue.use(Valid, {
    triggEvent: "blur", //triggEvent:事件  value值必须是字符串,
    errorClass: "vaild-error" //errorClass:类名
})

new Vue({
    router,
    store,
    render: h => h(App)
        // created() {
        //     console.log(this)
        // },
}).$mount(‘#app‘)

3、在组件中访问

<template>
    <div class="login">
        <header class="loginHeader">登录/注册</header>
        <main class="loginMain">
            <div class="con">          //在这里使用了自定义插件v-vaild
                <input v-valid="‘phone‘" placeholder="请输入姓名" v-model="user" class="user"/>
                <input v-valid="‘pwd‘" placeholder="请输入密码" v-model="password" show-password class="pwd"/>
                <input v-valid="‘code‘" placeholder="请输入验证码" v-model="code"  class="code"/>
                <span v-html="this.svg" class="captch" @click="upDataCaptch"></span>
                <el-button type="primary" class="btn" @click="handleLogin">登录</el-button>
                <router-link to="/register">注册</router-link>
            </div>
        </main>
    </div>
</template>
<script>
export default {
    props:{

    },
    components:{

    },
    data(){
        return {
            user:"",
            password:"",
            code:"",
            svg:""
        }
    },
    computed:{

    },
    methods:{
        handleLogin(){
            let data={username:this.user,password:this.password,captcha:this.code}
            this.$http.post("/api/buyer/user/login",data).then(res=>{
                window.sessionStorage.setItem("token",res.token)
                console.log(res)
                if(res.code===1){
                   this.$router.push("/list")
                }
            }).finally(()=>{
                // 登录失败再次调用
                this.upDataCaptch()
            })
        },
        upDataCaptch(){
            // 每次点击都请求一次验证码
             this.$http.get("/api/buyer/user/captcha").then(res=>{
                console.log(res)
                this.svg=res.data
            })
        }
    },
    created(){
        // 初始化
        this.upDataCaptch()
    },
    mounted(){

    }
}
</script>
<style  lang="scss">
*{
    padding: 0;
    margin: 0;
    list-style: none;
}
html,body{
    width: 100%;
    height: 100%;
    font-size: calc(100/750*100vw);
}
.login{
    width: 100%;
    height: 100%;
    font-size: calc(.16rem*2);
    display: flex;
    flex-direction: column;
    background: #ebebec;
}
.loginHeader{
    width: 100%;
    height: calc(.5rem*2);
    display: flex;
    justify-content: center;
    align-items: center;
}
.loginMain{
    flex: 1;
    overflow: auto;
}
.con{
    width: 80%;
    height: 80%;
    margin: 0 auto;
    input{
        width: 100%;
        height: calc(.3rem*2);
    }
    .user{
        margin-top: 20px;
    }
    .pwd{
        margin-top: 20px;
    }
    .btn{
       width: 100%;
       height: 10%;
       margin-top: 20px;
    }
    .code{
        margin-top: 20px;
        width: 50%;
    }
     .captch{
        margin-top: 20px;
    }
}
</style>

原文地址:https://www.cnblogs.com/linmiaopi/p/11306292.html

时间: 2024-11-09 06:04:19

vue自定义插件及使用的相关文章

Vue自定义插件方法大全

新年第一天首先祝大家新年快乐,心想事成! 1.利用根实例构造函数的原型 //在构造函数的原型链上添加自定义属性 Vue.prototype.test = 'pomelo' //在其他组件中调用 console.log(this.test) //pomelo 通过原型链添加方法,同理 2.通过Vue的插件机制 (常用方法) (1) 以util.js为插件文件,则需在项目入口文件main.js中引入: import Utile from './lib/utils' Vue.use(Utile) (2

Vue自定义插件(组件)Loading

vue.use()方法可以用来注册组件或者插件. 只要传入一个install()方法既可以注册 install(Vue,option){} 可以通过几种方式来自定义开发 Vue.$loading = -//直接挂载在Vue类上 Vue.propertype.$loading = -//直接挂载在Vue原型链上,可以通过this.$loading调用 Vue.component()//注册一个全局组件 Vue.directive()//注册全局指令 Vue.mixin()//全局混入,可以理解为继

vue自定义插件-弹框

<template> <transition name="msgbox"> <div v-if="show" class="msgbox-container" :class="className"> <header>{{title}}</header> <div class="content-body"> <div>弹出内容

浅析vue封装自定义插件

在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装自定义插件的本质就是组件实例化的过程或者指令等公共属性方法的定义过程,比较大的区别在于封装插件需要手动干预,就是一些实例化方法需要手动调用,而Vue的实例化,很多逻辑内部已经帮忙处理掉了.插件相对于组件的优势就是插件封装好了之后,可以开箱即用,而组件是依赖于项目的.对组件初始化过程不是很熟悉的可以参

Vue 开发自定义插件学习记录 -- 入门

首先,你需要了解插件实现的基本原理 插件基本原理: 我们都知道用Vue.use注册插件,那你知道Vue.use(plugin) 干了什么? 以下是我对Vue官网的一些摘录和个人的理解 Vue.use( plugin ) 参数: {Object | Function} plugin 用法: 安装 Vue.js 插件.如果插件是一个对象,必须提供 install 方法.如果插件是一个函数,它会被作为 install 方法. install 方法调用时,会将 Vue 作为参数传入. 该方法需要在调用

cordova3.X 运用grunt生成plugin自定义插件骨架

Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码. 一.安装cordova npm install -g cordova 二.创建项目 cordova create hello com.blue.sky.hybrid.app.hello HelloWorld 三.添加平台支持 cd hello cordova pl

cordova 自定义插件

cordova /phonegap 自定义插件 在使用cordova 的过程中,虽然官方提供的插件以及其他人开源的插件较多.但有时为了实现某种需求,还是需要自己编写插件. 以前总是会手动的配置cordova插件,具体可以参考phonegap手动配置插件 今天主要是介绍官方提供的plugman来创建插件 pluman的使用 首先,安装plumam npm install -g plugman 安装完之后,就可以创建plugin plugman create --name <pluginName>

BrnShop开源网上商城第四讲:自定义插件

重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的正题:自定义插件.上一讲中我们已经阐述了BrnShop插件的工作机制,现在我们详细介绍下如何自定义插件.首先BrnShop的插件从功能上分为三类,分别是: 开放授权插件(OAuth) 支付插件 配送插件 对应的接口文件(注:位于BrnShop.Core项目的Plugin/Base文件夹中)依次如下:

ElasticSearch 5.4 自定义插件

ElasticSearch 做为数据仓库处理速度确实很强,但是很多和业务相关的函数ElasticSearch怎么支持的,通过查询发现,ElasticSearch支持自定义插件(相当于自定义函数),通过自定义插件,开发人员可以实现各种业务相关的函数定义供相关人员使用. 1.   ElasticSearch  自定义插件编写 后续补充. 2.  ElasticSearch  自定义插件打包 2.1  自定义插件开发完成后,需要增加“plugin-descriptor.properties”配置文件,