可以实现。文档中也说了,插件通常用来为 Vue 添加全局功能。所以,当然也可以实现局部的。
插件功能见文档:
https://cn.vuejs.org/v2/guide/plugins.html我只用了 Vue2 做了一种测试,添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。
在 Vue 中注册插件时通过 Vue.use()进行注册。创建子组件时,可以通过 Vue.extend()来创建 Vue 的子构造函数,内部其实时通过寄生式组合继承实现的。那么,首先通过 Vue.extend()来创建子组件,再通过子组件调用 use 方法就能实现局部注册。
如下:
<html>
<head>
<title>Hello Vue</title>
<script src="
https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app"></div>
<script>
let A = Vue.extend({
template: '<div @
click="test">{{msg}}</div>',
data() {
return {
msg: '我是孙子组件,点击我触发局部注册的方法$myTest'
}
},
methods: {
test() {
this.$myTest()
}
}
})
A.use({
install(Vue, options) {
Vue.prototype.$myTest = function() {
console.log('myTest...')
}
}
})
let childComp = {
template: '<div>{{msg}}<A/></div>',
components: {
A
},
props: {
info: String
},
data() {
return {
msg: '我是子组件'
}
},
created() {
console.log('child created')
},
mounted() {
console.log('child mounted')
}
}
Vue.mixin({
data () {
return {
hello: 'world'
}
},
created() {
console.log('mixin parent created')
}
})
let app = new Vue({
el: '#app',
template: `<div><h1 @
click="test">{{msg}}</h1><childComp/></div>`,
data: {
msg: '我是父组件,点我会报错找不到'
},
components: {
childComp
},
methods: {
test() {
this.$myTest()
}
}
})
</script>
</body>
</html>