有时候我们需要在非vue文件使用组件,这时候我们可以通过vue插件的方式使用
import Vue from 'vue';
import toast from'./index.vue';
const ToastConstructor = Vue.extend(toast);
let toastPool = [];
let instance;
let installed = false;
//安装组件
const install = function (Vue, config = {}) {
if (installed) return;
console.log(installed);
Vue.component(toast.name, toast);
installed = true;
};
install(Vue);
let getAnInstance = () => {
if (toastPool.length > 0) {
let instance = toastPool[0];
toastPool.splice(0, 1);
return instance;
}
return new ToastConstructor({
el: document.createElement('div')
});
};
let Toast = (options = {}) => {
console.log('Toast', options);
let duration = options.duration || 3000;
let instance = getAnInstance();
instance.closed = false;
clearTimeout(instance.timer);
instance.message = typeof options === 'string' ? options : options.message;
instance.position = options.position || 'middle';
instance.className = options.className || '';
instance.type = options.type || '';
instance.iconClass = options.iconClass || '';
instance.duration = duration / 1000;
document.body.appendChild(instance.$el);
Vue.nextTick(function () {
instance.visible = true;
setTimeout(() => {
instance.visible = false;
if (options.close) {
options.close();
}
}, duration);
});
return instance;
};
export default Toast;
{{message}}span>
div>
template>