Vue.js 的插件应该暴露一个 install 方法。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象:
vue-myPlugin.js 自定义插件文件
(function () {
//需要向外暴露的插件对象
const MyPlugin = {}
//插件对象必须有一个 install()
MyPlugin.install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
// 逻辑...
console.log('Vue函数对象的方法myGlobalMethod()')
}
// 2. 添加全局资源
Vue.directive('my-directive', function (el, binding) {
el.textContent = binding.value.toUpperCase()
// 逻辑...
})
// 3. 注入组件选项
Vue.mixin({
created: function () {
// 逻辑...
}
})
// 4. 添加实例方法
Vue.prototype.$myMethod = function (methodOptions) {
console.log('Vue实例对象的方法$myMethod()')
// 逻辑...
}
}
//向外暴露
window.MyPlugin = MyPlugin
})()
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>插件</title>
</head>
<body>
<div id="text">
<p v-my-directive='msg'></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<!--导入插件文件必须放在vue文件后面 -->
<script src="./vue-myPlugin.js"></script>
<script>
//声明使用插件
Vue.use(MyPlugin) //内部会执行MyPlugin.install(vue)
Vue.myGlobalMethod()
const vm = new Vue({
el: '#text',
data: {
msg: 'Hello word!'
}
})
vm.$myMethod()
</script>
</body>
</html>