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. JavaScript Library – Alpine.js

    前言 Alpine 是高山的意思.Alpine.js 是一个轻量级的 JS Framework. 我为什么会去用它呢? 是这样的,我在做企业网站开发的时候会有 2 个阶段. 第一个 draft 阶段, ...

  2. DLA:动态层级注意力架构,实现特征图的持续动态刷新与交互 | IJCAI'24

    论文深入探讨了层级注意力与一般注意力机制之间的区别,并指出现有的层级注意力方法是在静态特征图上实现层间交互的.这些静态层级注意力方法限制了层间上下文特征提取的能力.为了恢复注意力机制的动态上下文表示能 ...

  3. codeforces 1931E

    题目链接 简介:对一些数字,余念安可以反转一个数字,齐夏将两个数字首尾相连变为一个数字.每个人都采取最优策略. 名单上只剩下一个号码.如果该整数不小于  10的m次方 ,则齐夏获胜.否则余念安就赢了. ...

  4. 4Templates Bootstrap Navbars and Links

    链接 传递参数    

  5. 深入理解Linux进程调度(下)

    一.SMP管理 在继续讲解之前,我们先来说一下多CPU管理(这里的CPU是指逻辑CPU,在很多语境中CPU都是默认指的逻辑CPU,物理CPU要特别强调是物理CPU).最开始的时候计算机都是单CPU的, ...

  6. yarn serve 开启项目服务失败 assets emit different content to the same filename

    error: answer: 删除public的文件,重新 yarn serve :

  7. 小程序的image组件

    mode属性:用来制定图片的裁剪和缩放模式:常用属性如下:

  8. 自建互联网档案馆「GitHub 热点速览」

    这两天北京的气温骤降,仿佛在提醒我们冬日的脚步已悄然而至,让人不禁感叹时间的飞逝,一年的时间"转瞬即逝". 如果你想留下互联网上的珍贵瞬间,避免它们消失在 404 错误中.这款开源 ...

  9. Django运行服务报NameError: name ‘os‘ is not defined

    出现Bug: 原因:这里调用了os模块,但是文件头并没引用os模块 解决办法:在settings.py文件头加上:

  10. AvaloniaUI项目离线开发全攻略:IDE安装、模板应用与NuGet私有化部署一站式解决

    1. 引言 在网络受限或完全离线的环境中开发.NET项目(本文示例为Avalonia UI项目),可能会遇到一些挑战.本文将为您提供一套完整的离线开发解决方案,包括IDE的安装.Avalonia UI ...