Прежде всего, я хотел бы поблагодарить @raub за то, что он позволил мне получить много знаний и записать их как свой собственный запас знаний на долгое время.
Классификация плагинов
Плагины Vue.js должны иметь публичный метод install. Первый параметр этого метода — конструктор Vue, а второй параметр — необязательный объект параметров:
MyPlugin.install = function (Vue, options) {
Vue.myGlobalMethod = function () { // 1. 添加全局方法或属性,如: vue-custom-element
// 逻辑...
}
Vue.directive('my-directive', { // 2. 添加全局资源:指令/过滤器/过渡等,如 vue-touch
bind (el, binding, vnode, oldVnode) {
// 逻辑...
}
...
})
Vue.mixin({
created: function () { // 3. 通过全局 mixin方法添加一些组件选项,如: vuex
// 逻辑...
}
...
})
Vue.prototype.$myMethod = function (options) { // 4. 添加实例方法,通过把它们添加到 Vue.prototype 上实现
// 逻辑...
}
}
Как написать загрузочный плагин
Структура каталога:
1.загрузка компонентов
nwd-загрузка.vue:
<template>
<div class="nwd-loading" v-show="show">
<div>{{text}}</div>
</div>
</template>
<script>
export default {
props: {
show: Boolean,
text: "正在加载中..."
}
}
</script>
2. Плагин пакета
index.js
import NwdLoadingComponent from './nwd-loading'
let $vm;
export default {
install(Vue,options) {
if(!$vm) {
const NwdLoadingPlugin = Vue.extend(NwdLoadingComponent);
$vm = new NwdLoadingPlugin({
el: document.createElement('div')
});
}
$vm.show = false;
let loading = {
show(text) {
$vm.show = true;
$vm.text = text;
document.body.appendChild($vm.$el);
},
hide() {
$vm.show = false;
}
};
if (!Vue.$loading) {
Vue.$loading = loading;
}
// Vue.prototype.$loading = Vue.$loading;
Vue.mixin({
created() {
this.$loading = Vue.$loading;
}
})
}
}
Примечание. Конструктор NwdLoadingPlugin создается с помощью метода Vue.extend(), а затем мы создаем экземпляр $vm с помощью new NwdLoadingPlugin() и монтируем его в элемент div. Наконец, нам нужно вставить его в узел DOM через document.body.appendChild($vm.$el).
Когда мы создаем экземпляр $vm, мы можем получить доступ к свойствам и методам экземпляра.Например, мы можем изменить значение show компонента NwdLoadingComponent, чтобы управлять его отображением и скрытием через $vm.show.
Наконец, мы добавили глобальное событие $loading через Vue.mixin или Vue.prototype.$loading, которое также включает два метода: show и hide. Мы можем использовать this.$loading.show() непосредственно на странице, чтобы показать загрузку, и this.$loading.hide(), чтобы закрыть загрузку.
3. Используйте плагины
main.js
import NwdLoading from '@/components/nwd-loading/index.js'
Vue.use(NwdLoading)
4. Вызвать плагин
....vue
export default {
created() {
this.$loading.show("loading内容")
}
}