1.前言

vue的插件其实通过操作Vue这个对象,为其扩展新的功能。例如:

// 1. 添加全局方法或 property
Vue.myGlobalMethod = function () {
// 逻辑...
} // 2. 添加全局资源
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
// 逻辑...
}
...
}) // 3. 注入组件选项
Vue.mixin({
created: function () {
// 逻辑...
}
...
}) // 4. 添加实例方法
Vue.prototype.$myMethod = function (methodOptions) {
// 逻辑...
}

2.插件的封装

  • 要拿到Vue这个对象,不同的模式有不一样的方法:
  • 在普通模式中,Vue框架以script标签的形式引入之后,Vue作为全局变量,插件直接对他进行操作即可。
  • 在脚手架模式中,各个模块是相互独立的,其他模块无法直接读取Vue这个对象。虽然可以通过import方式引入Vue进行操作,这是这样不符合规范。
  • 实际的做法是:定义一个函数,在函数内部对Vue进行操作。插件定义一个install方法,当执行Vue.use(plugin) 是,则执行这个install方法
  • 如果plugin是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。
  • 该方法需要在调用 new Vue() 之前被调用。
  • 当 install 方法被同一个插件多次调用,插件将只会被安装一次。

3.简单的实例:编写一个添加自定义指令和过滤器的插件

  • 非模块化模式:
//确保在这之前已经通过script标签引入了Vue

//添加全局的自定义指令 全部转换成大写
Vue.directive('upper-text',function(el,binding){
el.innerText = binding.value.toUpperCase();
}) //添加全局过滤器 全部转换成小写
Vue.filter('toLowerCase',function(val){
return val.toLowerCase()
})
  • 模块化模式:
//1.创建一个对象
const myPlugin = {} //为其添加install方法,接收Vue这个参数
myPlugin.install = function(Vue){
//测试
console.log('install方法执行了') //添加全局的自定义指令
Vue.directive('upper-text',function(el,binding){
el.innerText = binding.value.toUpperCase();
}) //添加全局过滤器
Vue.filter('toLowerCase',function(val){
return val.toLowerCase()
})
} //暴漏该对象
export default myPlugin
//入口文件
import Vue from 'vue'
import App from './App'
import myPlugin from './plugin/myPlugin.js' ////执行myPlugin.install(Vue)
Vue.use(myPlugin)
  • 使用插件
<body>
<div id="app">
<!-- 默认 -->
<p v-html="msg"></p>
<!-- 使用插件的自定义指令 -->
<p v-upper-text="msg"></p>
<!-- 使用过滤器 -->
<p>{{msg | toLowerCase}}</p>
</div>
</body>

执行结果:

<div id="app">
<p>Good Life</p>
<p>GOOD LIFE</p>
<p>good life</p>
</div>

4.添加实例方法

  • 在脚手架项目中,组件要用axios时,需要在组件中重新引用,如果在入口js文件中引入一次axios,并挂在到Vue原型链中,那么后面所有的组件都能访问这个对象,无需再次引用。
import Vue from 'vue'
//引入axios
import axios from 'axios'
//创建实例
const ajax = axios.create({
baseURL: 'https://api.example.com'
})
//将实例挂在到原型链中
Vue.prototype.$ajax = ajax

app.vue

<script>
export default {
data(){
return {
msg:'Good Life'
}
},
created(){
this.$ajax.get('/api/getMsg').then(res => {
console.log(err)
}).catch(err => {
console.log(err)
})
}
}
</script>

Vue.js 插件的更多相关文章

  1. vue.js插件使用(01) vue-resource

    本文的主要内容如下: 介绍vue-resource的特点 介绍vue-resource的基本使用方法 基于this.$http的增删查改示例 基于this.$resource的增删查改示例 基于int ...

  2. vue.js插件使用(02) vue-router

    概述 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的 ...

  3. vue.js及项目实战[笔记]— 03 vue.js插件

    一. vue补充 1. 获取DOM元素 救命稻草,document.querySelector 在template中标示元素`ref = "xxx" 在要获取的时候,this.$r ...

  4. IDEA安装vue.js插件后,new没有Vue component

    首先要安装vue相关的插件vue.js 但是很多人安装vue.js右键发现没有vue Componment,解决方法如下 Settings>Editor>File and Code Tem ...

  5. idea vue.js插件安装

    Vue.js for IntelliJ IDEA-based IDEs This plugin provides support for Vue.js in IntelliJ IDEA Ultimat ...

  6. sublime中如何安装vue.js插件,并使代码高亮显示

    前提概要: sublime的下载地址:http://www.sublimetext.com/ notepad++下载地址:https://notepad-plus-plus.org/ .vue的文件在 ...

  7. webStrom2017.1版本如何添加vue.js插件

    第一步:打开webStrom-setting 第二步:选择File and Code Templates--点击左上角"+"号 第三步:在Name:vue File    Exte ...

  8. PHPstorm如何安装vue.js插件

    1.什么是PHPstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.----来自百度百科 一句话:P ...

  9. Vue.Js添加自定义插件

    基于上篇我们讲了 在window下搭建Vue.Js开发环境 我们可以开发自己的vue.js插件发布到npm上,供大家下载使用. 1.首先打开cmd命令窗口,进入我们的工作目录下 执行 cd E:\vu ...

  10. 前端开发之走进Vue.js

    Vue.js作为目前最热门最具前景的前端框架之一,其提供了一种帮助我们快速构建并开发前端项目的新的思维模式.本文旨在帮助大家认识Vue.js,了解Vue.js的开发流程,并进一步理解如何通过Vue.j ...

随机推荐

  1. Rounding

    前言 以前写过一篇关于 Rouding 的 decimal, double, float, 但有点杂乱, 这篇做一个整理. Why need rouding? 除法会诞生小数. 甚至会诞生无限小数 ( ...

  2. React的useId,现在Vue3.5终于也有了!

    前言 React在很早之前的版本中加了useId,用于生成唯一ID.在Vue3.5版本中,终于也有了期待已久的useId.这篇文章来带你搞清楚useId有哪些应用场景,以及他是如何实现的. 关注公众号 ...

  3. SXYZ-7.3训练赛

    T1 房 啥啥啥,T1又又又爆了,整个人精神状态 良好. 解题思路 考虑数据保证任意两个房子不重合 建一个结构体存两边 最后判断一下 \(>t\) 加两个 \(==t\) 加一个 == 但是!! ...

  4. netCore 配置跨域 封装成文件

    namespace Zhaoxi.Manage.MentApi.Utility.RegisterExt { /// <summary> /// 跨域扩展 /// </summary& ...

  5. WPF-超市管理系统

    1. 新建 WPF APP (net framework )项目

  6. vue3 + vite 分析报告 report == rollup-plugin-visualizer

    安装插件 npm i rollup-plugin-visualizer -D 配置vite.config.js 文件 [加入插件] import { defineConfig } from 'vite ...

  7. 010 Python 重中之重的变量

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/16 20:32 # Filename:010 Python 重中之重的变 ...

  8. kotlin协程——>共享的可变状态与并发

    共享的可变状态与并发 协程可⽤多线程调度器(⽐如默认的 Dispatchers.Default)并发执⾏.这样就可以提出所有常⻅的并发 问题.主要的问题是同步访问共享的可变状态.协程领域对这个问题的⼀ ...

  9. web服务器静态资源下载

    1. 使用 Beego 实现静态文件下载 Beego 是一个强大的 Go Web 框架,提供了处理静态文件的功能.通过简单的配置,我们可以将本地文件夹作为静态资源目录,并为用户提供下载链接. 1.1 ...

  10. pytest的conftest.py文件讲解

    一.conftest.py的特点 1.可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture 2.conftest.py与运行的用 ...